Abstract
最近nodeを触り始めて、簡単なものを作ってローカルで動いたからherokuで動かそうとしたら割りとはまったのでメモっておく
Condition
前提として、node, socket.io, heroku等の公式サイトのマニュアルとか見ながらlocalhostで動くものが出来上がり、それをそのまま git push heroku master
してサーバにファイルをアップロードしたが割り当てられたURLにアクセスしても動かない、という状況から原因をつぶしていく。
Content
Procfile
最初作ったウェブページにアクセスすると↓のようなメッセージが表示された。
Application Error
An error occurred in the application and your page could not be served. Please try again in a few moments.
If you are the application owner, check your logs for details.
ぐぐったら、herokuでサーバ動かす時Procfileなるものが必要らしい。
https://github.com/herokaijp/devcenter/wiki/procfile
で、以下の記述の Procfile
というファイルをリポジトリルートディレクトリに置く。
web: node app.js
しかしまだ動かない。
サーバを起動してない
git push heroku master
したら勝手にサーバ起動してくれるのかと思ってたけどそんなことはなかった。
heroku ps:scale web=1
でサーバの起動。これで上記エラーは消えて、ぱっと見動くように見えた。が、実際に動かしてみても動かない。
localhost直書き
お前は馬鹿か
git grep localhost
して見つかったところを location.origin
とかに置き換える。
まだ直らない。
socket.io動かない
↓こんなエラーが出てた(恥ずかしいのでurlは変えてある)
WebSocket connection to 'ws://xxx.herokuapp.com/socket.io/1/websocket/RUaEEiZKh3HC5AUAuHte' failed: Unexpected response code: 503
ぐぐったらこれに行き当たった。
https://devcenter.heroku.com/articles/using-socket-io-with-node-js-on-heroku
ので、このドキュメント通りに
io.configure(function () {
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 10);
});
を追加した。
やっと動いた。