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 时资产未编译