在 Heroku 上部署 ActionCable (Rails 5 beta4)

Posted

技术标签:

【中文标题】在 Heroku 上部署 ActionCable (Rails 5 beta4)【英文标题】:Deploy ActionCable on Heroku (Rails 5 beta4) 【发布时间】:2016-05-02 10:40:35 【问题描述】:

我的本​​地主机上有一个带有 ActionCable 的 Rails 5 应用程序,我正在尝试将它部署到 heroku。 访问聊天室所在的页面时,可以在chrome的控制台看到:

WebSocket connection to 'wss://full-beyond-9816.herokuapp.com/cable' failed: Error during WebSocket handshake: Unexpected response code: 404

我确实在 heroku 上设置了 Redis 和 Redis 插件。这是我的 cable.yml 文件的生产部分:

production: &production
  :url: redis://redistogo:4140ce7f3e7493bd1b12@porgy.redistogo.com:9463/
  :host: tarpon.redistogo.com
  :port: 10272
  :password: 12e348ac10ca002879ce7d85daf0bb0
  :inline: true
  :timeout: 1

这是我的 room.coffee 文件:

(function() 
  this.App || (this.App = );

  App.cable = ActionCable.createConsumer();

).call(this);

在 heroku 上设置 ActionCable 似乎很棘手,我发现的每一篇关于该主题的帖子要么使用 Phusion Passenger(我正在使用 Puma),要么使用相当旧版本的 ActionCable(我正在使用最新的测试版) Rails 5).

我应该如何设置? 感谢您的时间和帮助

【问题讨论】:

【参考方案1】:

很难从你的错误中看出。我确实设法使用 Redis 插件和 Puma 在 Heroku 上部署了 ActionCable。虽然我不得不承认,由于 ActionCable 是超级新的,所以很难得到任何支持。我不得不玩弄它才能让它发挥作用。

在您的情况下,您可能遇到了 cors 问题。查看文件 config/environments/production.rb,取消注释以下部分并添加您的 heroku 应用名称:

  # Action Cable endpoint configuration
  config.action_cable.url = 'wss://yourappname.herokuapp.com/cable'
  config.action_cable.allowed_request_origins = [ 'https://yourappname.herokuapp.com', /http:\/\/yourappname.herokuapp.com.*/ ]

以防万一,这里是我的 cable.yml 文件:

# Action Cable uses Redis by default to administer connections, channels, and sending/receiving messages over the WebSocket.
production:
  adapter: redis
  url: add-hereyour-redis-url-from-heroku-redis-to-go-addon

development:
  adapter: async

test:
  adapter: async

不要忘记添加 gem Redis 以在生产环境中运行 Action Cable。关于你的 room.coffee 文件,仅供参考,它应该看起来像这样(意味着客户端需要设置此连接的消费者实例):

#= require action_cable
#= require_self
#= require_tree .

@App = 
App.cable = ActionCable.createConsumer()

【讨论】:

谢谢,我没有看到 production.rb 中的行。现在完美运行! 很高兴我能帮上忙 ;-) 在cable.yml中,可以使用一些erb:url: <%= ENV['REDISTOGO_URL'] %>

以上是关于在 Heroku 上部署 ActionCable (Rails 5 beta4)的主要内容,如果未能解决你的问题,请参考以下文章

部署到heroku后actioncable不起作用

ActionCable 超时 - Heroku 上的“空闲连接”

Heroku 上的 ActionCable 服务器响应时间

动作电缆在本地订阅,但不在 heroku 上

使用 AWS Elastic Beanstalk 部署 Rails ActionCable

Heroku Websocket到自定义域