コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

Heroku上でprebootを使ってRailsダウンタイムを無くす方法

git push でherokuにアップロードした場合、それなりに大きなRailsのアプリだと立ち上がりに数十秒〜数分かかってしまう

これを防ぐのがprebootだ。

ざっくり言うとN個Dynoがある場合、1個ずつ立ち上げてくれるので ダウンタイムがなくなるというもの

正確ではないが内部の動作のイメージ

2台Dynoがあるとして

  1. 新しいコードをPushした
  2. Gracefullyに1台にアプリプロセスをKill
  3. 1台に新しいコードを反映してアプリスタート
  4. リスタート完了後ネットワークに繋ぎ直し

2台目以降も同様に順々にやっていく

prebootの動作する前提条件

これを対象はDynoを2個以上であること

設定

prebootを付ける場合

heroku features:enable -a myapp preboot

prebootを外す場合

heroku features:disable -a myapp preboot

このprebootが有効な処理は以下のように設定のアプリのデプロイ、変更、再起動が出来る

  • git push
  • heroku config:add
  • heroku restart

参考

Heroku Dyno再起動時の振る舞い http://www.slideshare.net/shunjikonishi/heroku-dyno

Heroku Labs: preboot https://devcenter.heroku.com/articles/labs-preboot

Zero downtime on Heroku http://stackoverflow.com/questions/8326861/zero-downtime-on-heroku