##注意(2021年6月追記)
この記事は99%の人には何の参考にもなりません。
経験上はアプリケーションに特に問題がないのに Appilication Error が発生し、再起動で解決するということは稀に起こります。
少なくともここ数年は私の環境では起きていませんが、執筆時点(2013年3月)の heroku では稀に発生していました。
ずっと安定稼働していて特に思い当たる原因がない場合の対処法であって、Application Error が起きた時にいつでも通用する対処法ではありません。
このエラーが発生している場合は9割9分アプリケーションに問題があるので、きちんとエラーログを見て原因を特定してください。
heroku で運用を行っていると、原因不明の ApplicationError が発生することがあります。
30秒ルール以外で発生する場合、経験上はエラーコード H10 が発生していることが多いです。
Heroku Error Codes | H10 - App crashed
この例の通り deploy 時に多く発生するのですが、原因が Gem や設定ファイルの不備に起因することはあるものの、deploy 内容に問題がないこともあります。
こういうときは再起動だ!って訳で以下のコマンドを実行するわけです。
heroku restart --app application_name
でもこれやっても全く解消しないことも結構多いのです。
さて困った・・・。
こんなときは、以下のコマンドで再起動を実行しましょう。
heroku restart web.1 --app application_name
これは WebDyno を個別に再起動するコマンド。例えば WebDyno を3つ使っていたら、下記コマンドを全部実行する必要があります。
heroku restart web.1 --app application_name
heroku restart web.2 --app application_name
heroku restart web.3 --app application_name
heroku restart
では解消しなかったら ApplicationError もあらびっくり。
ログに "App crashed" ってずっと書きこまれていたのがすぅっと消えるのはちょっとした快感です。
起きないのがもちろん一番なわけですが。
このコマンドの説明、公式に載っていたはずだけどどこだったかな。。。
この WebDyno 個別再起動ではなく再 deploy で直ったこともありますが、いかんせん heroku は git push -f
で強制的に push しても同じ deploy 内容だと拒絶しちゃうし、どうしても10分以上かかっちゃう( deploy 容量や Gem による)のが悩みどころでした。
今はこのコマンドで解消できているので助かっています。
herorku の再起動は graceful restart なので、アクセス中のユーザがいても特に問題ない(はず)です。
ちなみに、やることがあるか分りませんが WorkerDyno は以下のコマンドで再起動できます。
heroku restart worker.1 --app application_name
しかし、アプリケーション再起動と Dyno の再起動って内部的にやってることが違うってことなんですかね、やっぱり。