Tôi có bộ điều khiển bao gồm mô-đun Rails ActionController::Live
. Tôi đang hiển thị nội dung của một logfile, hiện đang được đọc bằng FileTail
đá quý, và sử dụng SSE
từ ActionController::Live
như vậy:Kiểm tra bộ điều khiển bao gồm ActionController :: Live
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
Tôi muốn thử nghiệm các hành động live
sử dụng Rspec
. Đây là những gì tôi hiện có:
before { get :live }
it { expect(response.headers['Content-Type']).to eq("text/event-stream") }
after {response.stream.close unless response.stream.closed? }
nếu tôi không có phù hợp với after
tại chỗ, chuyền spec nhưng nó chỉ cần giữ trên nghe và kết nối được không bao giờ đóng cửa, do đó các thông số kỹ thuật không bao giờ kết thúc và bạn phải giết chúng bằng tay.
Nếu tôi có đường dây after
, thỉnh thoảng nó sẽ vượt qua, nhưng hầu hết các lần nó lại ném ngoại lệ và thông số kỹ thuật không thành công.
fatal:
No live threads left. Deadlock?
Có cách nào tôi có thể thực hiện công việc này không? Có thể có một cách cụ thể mà điều này phải được kiểm tra mà không thể tìm thấy ở bất cứ đâu.
Dựa trên tài liệu có vẻ như yêu cầu được chuyển đến một chuỗi riêng biệt (ngoài chuỗi chính) có nghĩa là bạn có thể muốn thực hiện theo một cái gì đó như thế này: http://stackoverflow.com/a/27383737/3109182 – Anthony