我让 Action Cable 在本地主机环境中工作,在这种情况下,我使用一个包含以下内容的简单文件启动 Puma 服务器
# /bin/bash
bundle exec puma -p 28080 cable/config.ru
一旦发生这种情况,puma 服务器就会启动并监听这个 28080 端口和本地服务器正在运行的端口。通过在线搜索,我找不到一个地方可以告诉我一种在heroku上模拟它的方法,或者一种让我的服务器始终在同一个端口上启动的方法(尽管我不知道这是否会给我想要的结果)
我设置了一个 javascript 文件来创建与该端口相关的使用者。
//= require cable
//= require_self
//= require_tree .
this.App = {};
App.cable = Cable.createConsumer('ws://127.0.0.1:28080');
我想我还需要更改 127.0.0.1 部分,以便部署到 heroku 也能正常工作,但我不确定。我试图切断 28080 部分并将其替换为 ENV['PORT'] 但它说它是一个未知变量,即使我设置了一个 puma.rb 文件,其端口设置为
... (only part of the file)
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
...
所以在我看来 ENV['PORT'] 被定义为当我检查 heroku 日志时 puma 服务器将是
2015-07-26T06:50:25.278030+00:00 heroku[web.1]: Starting process with command `bin/rails server -p 48875 -e production`
2015-07-26T06:50:30.760680+00:00 app[web.1]: => Booting Puma
2015-07-26T06:50:30.760714+00:00 app[web.1]: => Rails 4.2.1 application starting in production on http://0.0.0.0:48875
2015-07-26T06:50:30.760716+00:00 app[web.1]: => Run `rails server -h` for more startup options
2015-07-26T06:50:30.760718+00:00 app[web.1]: => Ctrl-C to shutdown server
2015-07-26T06:50:31.578843+00:00 app[web.1]: Puma 2.12.2 starting...
2015-07-26T06:50:31.578851+00:00 app[web.1]: * Min threads: 0, max threads: 16
2015-07-26T06:50:31.578859+00:00 app[web.1]: * Environment: production
2015-07-26T06:50:31.578861+00:00 app[web.1]: * Listening on tcp://0.0.0.0:48875
如果有任何不清楚的地方,我深表歉意,如果我遗漏了什么,我很乐意提供更多信息。
编辑
这是 /app/assets/javascripts/channels/index.js.erb 中的更新代码
//= require cable
//= require_self
//= require_tree .
this.App = {};
App.cable = Cable.createConsumer('<%= ENV["CABLE_SERVER"] %>');
其中 ENV["CABLE_SERVER"] 指向ws://the-action-cable-server.herokuapp.com
. 此变量存储在 rails 服务器环境变量中。