ActionCable 不尊重 production.rb 中的端口分配

Posted

技术标签:

【中文标题】ActionCable 不尊重 production.rb 中的端口分配【英文标题】:ActionCable not respecting port assigning in production.rb 【发布时间】:2018-03-02 20:16:56 【问题描述】:

我正在尝试在备用端口 (8080) 上运行我的 ActionCable 服务器。我将我的production.rb 设置如下:

config.action_cable.url = 'wss://my-domain.org:8080/cable'
config.web_socket_server_url = "wss://my-domain.org:8080/cable"

页面中包含的元标记准确地反映了更改的端口:

<meta name="action-cable-url" content="wss://my-domain.org:8080/cable" />

但是,当我检查请求时,我发现指定的端口未包含在 URL 中,因此我们永远无法连接到 websocket:

WebSocket connection to 'wss://my-domain.org/cable' failed: WebSocket is closed before the connection is established.

我已经测试并验证了我的服务器正在积极地在端口 8080 上侦听 websocket 请求,并且工作正常。如果我在javascript中手动设置App.cable.url = 'wss://my-domain.org:8080/cable',一切正常。

问题似乎是 ActionCable 没有从元标记中读取端口规范。我该如何解决这个问题?

Rails 5.1.3

【问题讨论】:

【参考方案1】:

为时已晚,但我认为问题出在您的 cable.js 上

(function() 
  this.App || (this.App = );
  App.cable = ActionCable.createConsumer();
).call(this);
ActionCable.createConsumer();不应该有url参数 &lt;%= action_cable_meta_tag %&gt; 必须在加载 JS 之前在您的模板中定义。

【讨论】:

以上是关于ActionCable 不尊重 production.rb 中的端口分配的主要内容,如果未能解决你的问题,请参考以下文章

不允许请求来源:使用 Rails5 和 ActionCable 时的 http://localhost:3001

部署到heroku后actioncable不起作用

ActionCable - 响应错误

如何找出谁连接到 ActionCable?

ActionCable的部署(参考Gorails)

Rails 4 和 ActionCable