action cable 在本地订阅,但不在 heroku 上订阅
action cable subscribing locally, but not on heroku
我一直在尝试所有可以在网上找到的方法,但没有任何效果。希望一些新鲜的眼睛会看到这个问题。这是我第一次使用 ActionCable,在本地一切正常,但在推送到 heroku 时。我的日志没有像我的开发服务器那样显示任何 actioncable 订阅:
[ActionCable] [email@email.com] MsgsChannel is streaming from msg_channel_34
并且在发送消息时,我确实看到 [ActionCable] Broadcasting to msg_channel_34:
但它们没有附加,我猜这意味着 received
方法不是 accessed/called?
我确实注意到 heroku 的日志上写着 Listening on tcp://0.0.0.0:5000
作为开发者它正在监听 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'
为什么这在 dev 上有效,但在 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
您的 procfile 建议您 运行 puma with cable/cable.ru 在端口 28080 上。另外 - 文件 cable/config.ru 不应该包含此行:
ActionCable.server.config.allowed_request_origins = ["http://localhost:3000"]
您已经在 config/environment/*.rb
中进行了配置
您的应用名称是字面上的 app-name
吗?我怀疑不是。这些值很有可能...
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']
需要更新以使用您打算连接的实际 public-facing URL。
问题是我的主机是 heroku 应用程序,但请求来自自定义域。
求解:
heroku config:set RAILS_HOST "http://www.example.com"
然后在production.rb:
config.action_cable.url = "wss://#{ENV['RAILS_HOST']}/cable"
我遇到了同样的问题,并找到了我需要的答案 here: redis gem 4+ incompatibility "Specified 'redis' for Action Cable pubsub adapter, but the gem is not loaded"。一旦我将我的 redis 降级到 3.1.0,工作完美。
我一直在尝试所有可以在网上找到的方法,但没有任何效果。希望一些新鲜的眼睛会看到这个问题。这是我第一次使用 ActionCable,在本地一切正常,但在推送到 heroku 时。我的日志没有像我的开发服务器那样显示任何 actioncable 订阅:
[ActionCable] [email@email.com] MsgsChannel is streaming from msg_channel_34
并且在发送消息时,我确实看到 [ActionCable] Broadcasting to msg_channel_34:
但它们没有附加,我猜这意味着 received
方法不是 accessed/called?
我确实注意到 heroku 的日志上写着 Listening on tcp://0.0.0.0:5000
作为开发者它正在监听 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'
为什么这在 dev 上有效,但在 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
您的 procfile 建议您 运行 puma with cable/cable.ru 在端口 28080 上。另外 - 文件 cable/config.ru 不应该包含此行:
ActionCable.server.config.allowed_request_origins = ["http://localhost:3000"]
您已经在 config/environment/*.rb
中进行了配置您的应用名称是字面上的 app-name
吗?我怀疑不是。这些值很有可能...
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']
需要更新以使用您打算连接的实际 public-facing URL。
问题是我的主机是 heroku 应用程序,但请求来自自定义域。
求解:
heroku config:set RAILS_HOST "http://www.example.com"
然后在production.rb:
config.action_cable.url = "wss://#{ENV['RAILS_HOST']}/cable"
我遇到了同样的问题,并找到了我需要的答案 here: redis gem 4+ incompatibility "Specified 'redis' for Action Cable pubsub adapter, but the gem is not loaded"。一旦我将我的 redis 降级到 3.1.0,工作完美。