Fayeを使ってRails4で簡単なチャットアプリ作ってみる。
Faye(http://faye.jcoglan.com/)
RailsCastの「#260 Messaging with Faye 」を参考にさくっと作ってみました。
日本語資料はこちら。
ほぼ、このrailscast通りにやれば、できます。
この過程でちょっと詰まったりした部分を、メモしておきます。
railscastではfaye.ruを
require 'faye' faye_server = Faye::RackAdapter.new(:mount => '/faye', :timeout => 45) run faye_server
と書いてますが、
chromeでコンソールみると「
faye Error during WebSocket handshake: 'Upgrade' header is missing」というエラーが出てきます。
これはこちらで解決。
http://stackoverflow.com/questions/18286228/websocket-header-missing
faye.ruに
Faye::WebSocket.load_adapter('thin')
を追加して、:timeoutを、25にしました。(thinのデフォルトのtimeoutが30なので、それより小さくする必要ありぽいので)
あと、development環境ではうまくいくけど、production環境ではapplication.jsとapplication.cssのpathが無いとか言われて、あれ!?っとなりました。
このあたり、assets pipelineについて理解してなかったので、あれっとなっただけでした。
(逆に勉強できてよかった。)
ここが非常に勉強になりました。
・ 279: Asset Pipelineを理解する
・Rails App Not Serving Assets in Production Environment(こちらで解決した)
上記の通りに、
$ bundle exec rake assets:precompile RAILS_ENV=productionして、ハッシュ値が含まれたapplication.jsとapplication.cssなどなどを生成して、
production.rbで、
railsにassetsをserverする(普段使うときは、nginxやapacheがやってくれている)
config.serve_static_assets = true
にして、解決しました!
で、試して作ったのがこちら。
https://github.com/mazeltov7/faye-app
ただし、公式のサイトを見るにセキュリティ周りを色々と設定する必要がありそうで、
やはりお手軽なprivate_pubを使いたくなる。。。
でも、ライアンさんはあんまアップデートしないって言ってるしなぁ…
Unfortunately I have not had time to actively work on this project recently. If you find a critical issue where it does not work as documented please ping me on Twitter and I'll take a look.
last commitが1 year agoっぽいし…
Railsでチャットはつらい感じなのかしら、やはり
<付け足し>
faye-railsなるものもあるみたいです!
jamesotron / faye-rails
あと、RailsCastの終わりに紹介されたPusherていうサービスも面白そう。
・http://pusher.com/
・Pusherでお手軽WebSocket – iPhoneから加速度をリアルタイム送信