合宿で heroku 使ってたチームがあって、とても便利そうだった。昔、Node.jsで画像アップローダをつくったんだけど(node.jsでtrayという画像アップローダを作った - はこべブログ ♨) 自分のVPSで雑に動かしていて、飽きてしまうとあんまり気にしなくなって、止まっても放置したりしてた。それくらいであれば、herokuで一旦動かすようにしておけば、可用性は担保されるだろうと思い立ち、herokuで動作させることにした。
動いている様子はこちら: http://imagetray.herokuapp.com/
左上のマスに画像をドラッグ・アンド・ドロップすると画像がアップロードされる。誰かがアップロードするとリアルタイムに更新される。コードを更新したり、しばらくだれも使ってなかったりして、herokuのホストがrestartされると、アップロードされた画像は消えてしまう、刹那的な仕様になってる。画像が404になってても気にしないで欲しい。
https://github.com/hakobe/tray を herokuで動かした手順は以下のとおり。
- 適当なherokuappを作る
- https://github.com/hakobe/tray を手元にcloneしたあと、gitのremoteにherokuのリポジトリを追加する
- add-on を追加するためには、無料のものを使う場合でも、クレジットカードの登録がいる。Account Verification | Heroku Dev Center を参考に登録する
heroku addons:add redistogo:nano
としてRedisのadd-onを無料プランで追加する- Redis To Go | Heroku Dev Centerを参考にコードに手を加える。変更したコードはこういう感じ。環境変数に接続情報が入ってるのおもしろい。
- WebSocketを使うので、実験的に提供されているWebSocketを、
heroku labs:enable websockets
とかやって有効にしておく。使えない気がしてたので良かった git push heroku master
とかして反映する
Redisには5MBまでしか記録できないし、アップロードされた画像もホストが再起動されると消えるけど、とりあえずいつでもWebアプリケーションが動いているという状態にはできた。
状態をあまり持たないお試し的なWebアプリは、対応もそんなに難しくないしherokuにのせていったら良さそう。自分が飽きてしまって、管理を放棄すると、見に来た人が503とかいわれて悲しいが、とりあえずherokuにいれておけば利用できなくなるということはなさそう。
ただ、あんまりアプリケーションの数を増やすと無料の750時間を使いきってしまってコストがかかる。サンプルのアプリケーションにそんなにアクセス来るとも思えないけど、ほうっておくと課金される状態にはなるので気をつけたい。 Usage & Billing | Heroku Dev Center によるとアプリケーションごとに750時間だった。安心。
アプリケーションがherokuに準拠したので、herokuにアップロードすればだれでも使える状態になったのもうれしい。herokuの仕様に準拠していれば、herokuを知っている人ならだれでも起動できるはず。
herokuのadd-onsのページを見ると全然知らないミドルウェアやサービスに気づけたのもよかった。IronCacheとか知らなかった。