概要
websocket-railsのサンプルアプリをherokuで動かそうとしてハマったのでメモ
多分websocket全般でそうなんではないか
ruby 2.2.2
rails 4.2.6
websocket-rails 0.7.0 712fd4e
(先に)結論
ローカルでは正常に動いている事が前提
以下は、参考URLに書いてある通り
1.Redisの有効化
heroku addons:add redistogo
2.Redisの接続先、パスワードを確認
herokuダッシュボード ⇒ 自分のアプリケーションのページ ⇒ Add-ons ⇒ Redis To Go
Generalに以下のように書いてある
redis://redistogo:”パスワード”@”RedisのURL”:”ポート”
3.websocket-railsにredis接続先を与える
vim config/initializers/websocket_rails.rb
config.redis_options = {:host => ’RedisのURL’, :port => ’ポート’, :user => 'redistogo', :password => ’パスワード’}
(ここで、ユーザ名は'redistogo'固定)
4.ディスパッチャのurlをlocalhostではなく、heroku上での自分のアプリ公開URLに変更 (RedisのURLではない)
var ws_rails = new WebSocketRails("自分のアプリ.herokuapp.com/websocket");
参考
[some tech talks :Deploy Rails Websocket App Into Heroku]
備考1
特にHerokuの構成について未だあまりよく分かっていないため、以下は推測を含む
HerokuでRedisが必要となる理由は、heroku dev centerによると、1アプリケーションでもdynoは複数に分かれる可能性があり、そうなった場合に異なるdyno同士で通信ができないため。
無料利用ではdynoは1台限定なのでは?という気もするが、とにかくRedisを介さないと動かなかった。
備考2
以前の記事で参考にしたwebsocketのサンプルは、上記参考URLがもとになっているようだ