我一直在尝试可以在网上找到的所有内容,但没有任何效果。希望新的眼睛会看到这个问题。这是我第一次使用ActionCable,在本地一切都很好,但是当推送到heroku时。我的日志没有像我的开发服务器那样显示任何可操作的订阅:

[ActionCable] [[email protected]] MsgsChannel is streaming from msg_channel_34

在发送消息时,我确实看到了[ActionCable] Broadcasting to msg_channel_34:,但未附加它们,我猜测这意味着未访问/调用received方法?

我确实在heroku的日志中注意到它说Listening on tcp://0.0.0.0:5000,而dev正在localhost:3000监听。我是否应该以某种方式针对我的heroku应用程序?

以下是相关的配置文件:

程序文件:
web: bundle exec puma -p 5000  ./config.ru
actioncable: bundle exec puma -p 28080  cable/config.ru
redis: redis-server

***感谢下面的评论,我也在努力。仍然无法正常工作,但是我可以看到它正在监听的端口正在更改,这使我相信它与配置有关吗? :
web: bundle exec puma -p $PORT  ./config.ru
actioncable: bundle exec puma -p $PORT  cable/config.ru
redis: redis-server

/cable/config.ru
require ::File.expand_path('../../config/environment',  __FILE__)
Rails.application.eager_load!

ActionCable.server.config.allowed_request_origins = ["http://localhost:3000"]
run ActionCable.server

config/environments/development.rb
config.action_cable.allowed_request_origins = ['localhost:3000']
config.action_cable.url = "ws://localhost:3000/cable"

config/environments/production.rb
config.web_socket_server_url = "wss://app-name.herokuapp.com/cable"
  config.action_cable.allowed_request_origins = ['https://app-name.herokuapp.com', 'http://app-name.herokuapp.com']

config/cable.yml
local: &local
  adapter: async
  :url: redis://localhost:6379
  :host: localhost
  :port: 6379
  :timeout: 1
  :inline: true
development: *local
test: *local


production:
  :url: redis:<%= ENV["REDISTOGO_URL"] %>
  adapter: redis

设置了<%= ENV["REDISTOGO_URL"] %>,通过运行heroku config进行确认

routes.rb
mount ActionCable.server => '/cable'

为什么这对开发人员有效,但对heroku无效?我已经阅读了几个小时,但无法弄清楚。谢谢!!

更新:
heroku日志:
2017-01-25T20:32:57.329656+00:00 heroku[web.1]: Starting process with command `bundle exec puma -p 5000  ./config.ru`
2017-01-25T20:32:59.600554+00:00 app[web.1]: Puma starting in single mode...
2017-01-25T20:32:59.600574+00:00 app[web.1]: * Version 3.6.2 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity
2017-01-25T20:32:59.600575+00:00 app[web.1]: * Min threads: 0, max threads: 16
2017-01-25T20:32:59.600577+00:00 app[web.1]: * Environment: production
2017-01-25T20:33:02.375128+00:00 app[web.1]: profile controller
2017-01-25T20:33:02.588653+00:00 app[web.1]: Use Ctrl-C to stop
2017-01-25T20:33:02.588446+00:00 app[web.1]: * Listening on tcp://0.0.0.0:5000
2017-01-25T20:33:17.681469+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2017-01-25T20:33:17.681469+00:00 heroku[web.1]: Stopping process with SIGKILL
2017-01-25T20:33:17.862118+00:00 heroku[web.1]: Process exited with status 137
2017-01-25T20:33:57.501746+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2017-01-25T20:33:57.501908+00:00 heroku[web.1]: Stopping process with SIGKILL
2017-01-25T20:33:57.630071+00:00 heroku[web.1]: Process exited with status 137
2017-01-25T20:33:57.642753+00:00 heroku[web.1]: State changed from starting to crashed

最佳答案

问题是我的主机是heroku应用,但请求来自自定义域。

解决:
heroku config:set RAILS_HOST "http://www.example.com"
然后在production.rb中:
config.action_cable.url = "wss://#{ENV['RAILS_HOST']}/cable"

关于ruby-on-rails - Action 电缆在本地订阅,但不在heroku上订阅,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41860718/

10-16 17:34