gpt4 book ai didi

ruby-on-rails - ActionCable 在 rspec 系统规范期间引发异常

转载 作者:行者123 更新时间:2023-12-04 06:30:12 31 4
gpt4 key购买 nike

我在使用 ActionCable 和使用 Capybara 的系统规范时遇到问题。 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

我正在使用:

  • ruby 2.4.1
  • rails 5.1.4
  • rspec 3.7.0
  • capybara 2.13.0
  • 美洲狮 3.10.0
  • selenium-webdriver 3.6.0

我试过:

Capybara.server = :puma

这没有什么区别(可能是因为系统规范已经在使用 Puma)。

我调试问题的尝试:

仔细观察错误,write_nonblock 方法在 nil 上被调用,发生在第 45 行:

https://github.com/rails/rails/blob/385825fb705446a1f11e82b65ca97a50d7e67898/actioncable/lib/action_cable/connection/stream.rb#L45

似乎 @rack_hijack_io 被设置为 nil,这可能发生在此处的 hijack_rack_socket 方法中:

https://github.com/rails/rails/blob/385825fb705446a1f11e82b65ca97a50d7e67898/actioncable/lib/action_cable/connection/stream.rb#L102

@socket_object.env["rack.hijack_io"] 返回 nil,所以我们没有 "rack.hijack_io" key 。所以错误似乎与 Rack Hijacking API 有关。

最佳答案

我不知道有关您的测试的详细信息,但就我而言,问题出在 config/environments/[env] 中的 config.log_level = :debug 中。

因为ActionCable会产生很多关于广播的调试信息。例如,如果您有 100 个连接的客户端,您的日志文件将被每次广播的 100 条消息污染。

PS:我在 NGINX + Passenger(6.0.4) + GKE 上使用 Stackdriver 日志记录发现了这个错误。

关于ruby-on-rails - ActionCable 在 rspec 系统规范期间引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47305850/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com