Heroku:Rails 5 ActiveCable 配置问题。 WebSocket 握手期间出错:缺少“升级”标头

Posted

技术标签:

【中文标题】Heroku:Rails 5 ActiveCable 配置问题。 WebSocket 握手期间出错:缺少“升级”标头【英文标题】:Heroku: Rails 5 ActiveCable configuration issue. Error during WebSocket handshake: 'Upgrade' header is missing 【发布时间】:2017-02-16 09:34:28 【问题描述】:

我一直在使用 Rails 5 和 ActiveCable 实现一个简单的聊天应用程序。在本地,这个应用程序很好用。但是当我尝试在 heroku 上测试它时,我在 JS 控制台中得到以下内容:

'WebSocket 握手期间出错:'Upgrade' 标头丢失'

我做了什么: 我关注了这个guide。 我设置了 cable.yml

production:
  adapter: redis
  url: redis://rediscloud:url_here

我在 production.rb 中设置了 URL

Rails.application.configure do
    config.web_socket_server_url = "wss://my-app.herokuapp.com/cable" 

我设置了允许的主机。

 config.action_cable.allowed_request_origins =
    ['https://my-app.herokuapp.com',
    'http://my-app.herokuapp.com']

但这无济于事。任何想法为什么会发生此错误或我该如何解决?

问候。

【问题讨论】:

【参考方案1】:

问题出在默认选择的服务器上。

默认服务器服务器是 Thin。它发送了错误的回复。

我已根据this 指南将服务器改回 puma,无需更改任何代码即可解决此问题。

【讨论】:

【参考方案2】:

在同一个问题苦苦挣扎之后,我们甚至开始考虑将默认服务器从 thin 更改为 Puma

但我们终于得到了答案:)

ActionCable 现在可以使用 Thin 和一些额外的配置工作: 在您的 Gemfile 中:

gem 'faye-websocket'
gem 'thin'

创建一个config/initializers/thin_action_cable.rb

Rails.application.config.action_cable.use_faye = true
Faye::WebSocket.load_adapter 'thin'

此链接可帮助我解决该问题。

ActionCable not working with Thin #23696

【讨论】:

以上是关于Heroku:Rails 5 ActiveCable 配置问题。 WebSocket 握手期间出错:缺少“升级”标头的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上部署 ActionCable (Rails 5 beta4)

Heroku:Rails 5 ActiveCable 配置问题。 WebSocket 握手期间出错:缺少“升级”标头

Rails 5.2 和 webpacker 3.4.3:部署到 Heroku 时资产未编译

Rails 5 + Webpacker 应用程序作为空白页面部署到 Heroku,没有失败

C9+heroku部署

试图弄清楚为什么我的rails应用程序在heroku中崩溃了?