ブログより転機
http://konyu.hatenablog.com/entry/2014/10/22/122930
git push でherokuにアップロードした場合、それなりに大きなRailsのアプリだと立ち上がりに数十秒〜数分かかってしまう
これを防ぐのがprebootだ。
ざっくり言うとN個Dynoがある場合、1個ずつ立ち上げてくれるので
ダウンタイムがなくなるというもの
正確ではないが内部の動作のイメージ
2台Dynoがあるとして
- 新しいコードをPushした
- Gracefullyに1台にアプリプロセスをKill
- 1台に新しいコードを反映してアプリスタート
- リスタート完了後ネットワークに繋ぎ直し
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