使用Capybara将ActionCable与系统规格一起使用时遇到问题。 ActionCable在我的开发服务器上运行得很好,但是在使用系统规范进行测试时,它无法连接到Websockets。
/log/test.log
的输出显示:
Started GET "/cable" for 127.0.0.1 at 2017-11-15 18:17:04 +0900
Started GET "/cable/" [WebSocket] for 127.0.0.1 at 2017-11-15 18:17:04 +0900
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
WebSocket error occurred: undefined method `write_nonblock' for nil:NilClass
WebSocket error occurred: undefined method `write_nonblock' for nil:NilClass
WebSocket error occurred: undefined method `write_nonblock' for nil:NilClass
我正在使用:
我试过了:
Capybara.server = :puma
这没有任何区别(可能因为系统规格已经在使用Puma)。
我尝试调试此问题:
仔细观察错误,在write_nonblock
上调用方法nil
,这在第45行发生:
似乎@rack_hijack_io
设置为nil
,这可能发生在hijack_rack_socket
方法中:
@socket_object.env["rack.hijack_io"]
会返回nil
,因此我们没有"rack.hijack_io"
密钥。所以错误似乎与Rack Hijacking API有关。
答案 0 :(得分:0)
我不知道有关您测试的详细信息,但就我而言,问题出在config.log_level = :debug
的{{1}}中。
因为ActionCable会产生许多有关广播的调试信息。例如,如果您有100个已连接的客户端,则每次广播的日志文件都会被100条消息污染。
PS:我在使用Stackdriver Logging的NGINX + Passenger(6.0.4)+ GKE上捕获了此错误。