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');
herokuへのデプロイも機能させるには、127.0.0.1の部分も変更する必要があると思いますが、よくわかりません。28080 の部分を切り取り、それを ENV['PORT'] に置き換えようとしましたが、ポートが
... (only part of the file)
rackup DefaultRackup
port ENV['PORT'] || 3000
environment ENV['RACK_ENV'] || 'development'
...
したがって、herokuログを確認すると、ENV ['PORT']が定義されているように見えました。
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 サーバーの環境変数に格納されます。