动作电缆在本地订阅,但不在heroku上订阅 [英] action cable subscribing locally, but not on heroku

查看:107
本文介绍了动作电缆在本地订阅,但不在heroku上订阅的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've been trying everything I can find online, and nothing is working. Hoping some fresh eyes will see the issue. This is my first time using ActionCable, and everything works great locally, but when pushing to heroku. my logs do not show any actioncable subscriptions like my dev server:

[ActionCable] [email@email.com] MsgsChannel is streaming from msg_channel_34

并且在发送消息时,我确实看到了[ActionCable] Broadcasting to msg_channel_34:,但是它们没有追加,这是在猜测received方法没有被访问/调用吗?

and when sending a message, I do see [ActionCable] Broadcasting to msg_channel_34: but they are not appending, which I'm guessing means that the received method is not being accessed/called?

我确实在heroku的日志中注意到它说Listening on tcp://0.0.0.0:5000作为开发人员正在localhost:3000监听的位置.我是否应该以某种方式对我的heroku应用程序表示兴趣?

I do notice on heroku's logs it says Listening on tcp://0.0.0.0:5000 where as dev it is listening at localhost:3000. Should I be pointnig towards my heroku app somehow?

以下是相关的配置文件:

Here are the relevant configuration files:

Procfile:

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

***由于下面的评论,我也在尝试.仍然无法正常工作,但是我可以看到它正在侦听的端口正在更改,这使我相信它与配置有关吗? :

***Thanks to the comment below, I am also trying. Still not working, but I can see that the port it's listening to is changing, making me believe it has something to do with the configuration? :

web: bundle exec puma -p $PORT  ./config.ru  
actioncable: bundle exec puma -p $PORT  cable/config.ru  
redis: redis-server  

/cable/config.ru

/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/environments/development.rb

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

config/environments/production.rb

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

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确认

<%= ENV["REDISTOGO_URL"] %> is set, confirmed by running heroku config

routes.rb

routes.rb

mount ActionCable.server => '/cable'

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

Why is this working on dev, but not on heroku? I've been reading for hours, but can not figure it out. Thank you!!

更新: heroku日志:

UPDATE: heroku logs:

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应用,但请求来自自定义域.

The issue was my host is the heroku app, but the requests were coming from the custom domain.

解决:

heroku config:set RAILS_HOST "http://www.example.com"

然后在production.rb中:

And then in production.rb:

config.action_cable.url = "wss://#{ENV['RAILS_HOST']}/cable"

这篇关于动作电缆在本地订阅,但不在heroku上订阅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆