当前位置: 首页 > 面试题库 >

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

微生旻
2023-03-14
问题内容

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

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

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

我确实在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'

为什么这对开发人员有效,但对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"



 类似资料:
  • 我使用devise gem with rails进行身份验证,我的应用程序在本地运行良好,但是在heroku上部署时无法访问device视图。 检查日志时出现以下错误: ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←[app[web.1]:←[0mDevis处理e::SessionsController#新作为超文本标记语言 ←

  • 我正在尝试在Windows Phone8.1上运行parse.com推送通知(来自本教程)。 看来初始化起作用了: 但当我尝试订阅广播频道时,会引发以下异常: 通知平台无法连接云通知服务。(HRESULT异常:0x803E011B) 我还通过将包安全标识符和客户端机密添加到parse.com Windows推送凭据设置(遵循本教程)来验证Windows Store应用程序。但这并不能解决问题。 关

  • 订阅指过滤表(table)的规则,Canal 客户端发送给客户端订阅规则,那么服务端将会推送符合规则的表数据过来,采用正则匹配。 允许所有表:.\*\\\\..\*

  • 我写了一个逻辑,使用Spring反应器库来获取所有运算符,然后在异步模式下为每个运算符(分页)获取所有设备。 创建了一个通量来获取所有运算符,然后订阅它。 现在,对于每个运算符,我正在获取需要多个订阅才能获得设备mono的设备,该设备通过订阅MONO获得所有页面异步。 此代码工作正常。但我的问题是,从内部订阅mono是一个好主意吗?

  • 问题内容: 跟随Redis Pub / Sub 这工作正常,我可以使用以下任何语言发布消息 使用,我可以验证此请求是否已正确发布 当我将订阅者 块 添加到 其他类(侦听器类)中的 该频道时,问题就开始了,如下所示 中的,还表明侦听器已正确订阅 问题是,当我将订户侦听器类添加到相同的Rails应用程序时…它停止工作,导致侦听Redis服务器并停止执行任何其他代码…它只是坐在那里侦听。 因此,有一种方

  • 考虑一个场景,我们有一个发出字符串的流,我们想将字符串保存在文件中。 我正在使用Publish科目,这很好: 但是,这不起作用(只有被交付) 有没有办法让第二个场景也能正常工作? i、 例如,我们是否可以更改PublishSubject以确保它缓冲事件,直到订阅者使用它们? 请注意,BehaviorSubject不是一个选项,因为重新订阅会导致另一个文件保存。它没有“消费事件”的概念。 我找到了U