お腹が痛い人を集計するPonpetterをリリースした。
通勤中に腹痛に襲われる事はよくあると思うのですが、
世の中には一体どれくらいお腹が痛い人が存在するのか気になり集計するWebアプリを作成しました。
Ponpetter
http://ponpetter.herokuapp.com/
構成
ソース https://github.com/yassun/ponpetter
開発中のトピック
Redis To Go
Heroku上でRedisを使用するためのアドオンです。
無料プラン(nano
)を使用する場合でもクレッジカードの登録が必須でした。
nano
はサイズが5MB、コネクション数が最大10となってます。
今回はスケジューラ用のコネクションを必ず確保したかったので、 Webアプリ起動時にスレッドを起動して常駐させる作戦をとりました。
Tweet集計スケジューラ
通常Heroku上でスケジューラを使用する場合はHeroku Scheduler
を使用します。
ですが、スケジューラ利用時間もDynoの利用時間に加算されるため750時間の無料時間を超える可能性がありました。
その回避策として、Webアプリ起動時に別スレッドで動き続けるループをEventmachine
のEM::defer
で作成し、
そこから集計スケジューラを呼び出しました。
HerokuのSinatraにバックグラウンドワーカーを詰め込んで節約
NewRelicを使用してHerokuのアイドル状態を回避
NewRelicのAvailability monitoring
にサイトURLを指定することにより定期的にリクエストが来るためアイドル状態になる事を回避できます。
NewRelicの導入方法については公式を参照 https://devcenter.heroku.com/articles/newrelic#ruby-installation-and-configuration
Websocket
Heroku上でWebsocket
に対応したアプリを作成する方法については公式にfaye/websocket
を用いた詳細な解説とサンプルアプリがあったのでそちらを参考にしました。
https://devcenter.heroku.com/articles/ruby-websockets
https://github.com/heroku-examples/ruby-websockets-chat-demo
React.js
最初はjQueryで実装していたのですが、せっかくなので最近話題のReact.js
に変更しました。
ページ構成要素も少ないので簡単に対応できました。
グラフ描画やwebsocketの接続等のsetState
で変更させない部分について等、
まだまだセオリーが掴めてないです。
Travice CI
phantomjs
のバージョン問題でReact.js
のテストが失敗する事象にとてもハマりました。
後日、解決策をQiitaに書きました。
Travis Ci上でReact.jsのプロジェクトをPhantomJSでテストした場合にFailする現象
まとめ
こんなにお腹が痛い人がいるとは思いませんでした。
かぐや姫の御門登場時にすごい勢いで増えてウケました。
よろしければトイレでツイートしてみてください!