gpt4 book ai didi

ruby-on-rails - ActionCable 不再在生产环境中工作

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:17 25 4
gpt4 key购买 nike

我有一个 Rails 5 应用程序,它使用 Action Cable 来实现 websocket 功能。

在我的开发环境中,一切都按预期进行,浏览器客户端成功连接到 Action Cable channel 。

在我的生产环境中,Action Cable 曾在某个时候工作,但随后突然停止工作,没有任何直接的明显原因。

如果我在开发机器上运行应用程序时将 RAILS_ENV 更改为 production Action Cable 工作正常。尽管基本环境相同,但在实际生产机器上运行应用程序时似乎有些不同。

我在 Chrome 控制台中看到的具体错误:

mydomain.com/:1 WebSocket 连接到“wss://mydomain.com/cable”失败:WebSocket 在建立连接之前关闭。我在其他浏览器中遇到了类似的错误,因此它似乎与浏览器无关。我在测试时禁用了所有广告拦截器,以确保它们不会干扰。

Development.rb ENV相关设置:

config.action_cable.url = "ws://localhost:#{port}/cable"

Production.rb ENV 相关设置:

hostname = ENV.fetch('HOSTNAME')
port = ENV.fetch('PORT')
base_url = "#{hostname}:#{port}"

config.action_cable.url = "wss://#{hostname}/cable"
config.action_cable.allowed_request_origins = ["https://#{base_url}", "https://#{hostname}"]

我使用 Puma 作为网络服务器。 Web 服务器提供安装了有效证书的 SSL 连接。在生产机器上,Puma 在端口 3000 上为应用程序提供服务,但它被转发到路由器中的端口 443

在我的开发机器和生产机器上运行应用程序的唯一显着区别是在生产机器上使用 SSL。

最佳答案

我现在可以安全地得出结论,这是一个错误,可能在 Rails/ActionCable 本身中。其他报告证实了这一点,正如我曾说过的,它运行良好,那是我使用 Rails 5.0.0.1 的时候。当我更新到 5.0.1 时,它坏了,并且在 5.0.2 上仍然坏了。我在 GitHub 上打开一个问题 issue tracker Rails 项目。

编辑 2017 年 7 月:Rails 确实改变了它读取和写入 Rack 套接字的方式,但是您使用的实际网络服务器软件需要支持这些非阻塞读取和写入方法。就我而言,Puma 当时没有,因此 websockets 不起作用。对于 Puma,现在有一个新版本,其中包含针对此问题的解决方法。

关于ruby-on-rails - ActionCable 不再在生产环境中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42263023/

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