mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

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から加速度をリアルタイム送信