içeren bir kontrolör ben Raylar ActionController::Live
modülünü içeren bir denetleyici var. Ben FileTail
gem kullanarak okunurken bir kayıt dosyasına, içeriğini gösteren ve bu yüzden gibi ActionController::Live
den SSE
kullanıyorum:Test ActionController :: Canlı
class LogsController < ApplicationController
include ActionController::Live
def live
response.headers['Content-Type'] = 'text/event-stream'
sse = SSE.new(response.stream, event: 'queries')
File.open(logfile_location) do |log|
log.extend(File::Tail)
log.interval = 1
log.backward(10)
log.tail {|line| sse.write line}
end
rescue => e
Rails.logger.info "Error Message:: #{e.message}"
ensure
sse.close
end
end
Ben Rspec
kullanarak live
eylemi test etmek istiyorum. Bu şu anda ne var:
before { get :live }
it { expect(response.headers['Content-Type']).to eq("text/event-stream") }
after {response.stream.close unless response.stream.closed? }
Ben yerinde after
ile çizgi yoksa, Spec geçtiği ama sadece dinleme devam ediyor ve bağlantı dolayısıyla gözlük bitirip asla hiçbir zaman kapatıldı Onları elle öldürmek zorunda. Ben after
çizgi varsa
, bazen geçer, ancak çoğu kez bir istisna atar ve gözlük başarısız.
fatal:
No live threads left. Deadlock?
Bu işi yapabileceğimin bir yolu var mı? Belki de bunun herhangi bir yerde bulamaması gereken belirli bir yolu vardır.
: http://stackoverflow.com/a/27383737/3109182 – Anthony