※ 誤解をおそれずに大胆に書いてます。参考にする際はご注意を。
unicornとは?
- web-rack serverのこと
- master-slave構成になっていて、空いたslaveからのpullでアクセスを処理するので、 処理中プロセスにアクセスが行くことがなくなる
参考
http://fujiike.hateblo.jp/entry/2015/08/20/170751
http://techracho.bpsinc.jp/piichan1031/2010_07_09/2075
rackとは?
- routes処理をrubyアプリがうごくようによしなにやってくれるやつ
- rubyアプリはrackがないとうごかないってことかな
web rack サーバーとは?
- rackの機能を持ち合わせたwebサーバー
- unicornはこれにあたる
- web rack サーバー + rubyアプリでも動くけど、webサーバーはnginxのほうがいいので、nginx + unicorn + railsみたいな構成になりがち
リリース時に再起動は必要?
- 再起動というか、新しいプロセスを起動し直す必要はある
- unicornの機能でダウンタイムなしでのrubyアプリの更新は可能
再起動時に古いプロセス残ったりするのなんで?
- unicornにのプロセスにUSR2のコマンド送ると新しいコードで新しいマスタを作る
- 古いマスタはそのまま残るのでプロセスが増えてしまう
- 正しくは古いマスタを消さなければいけない
- unicornの設定ファイルで古いプロセスを消すような設定いれるべき
参考
preload_appとは?
- trueだと、新しいmasterがworkerを生む前に新しいコードがロードされて、rubyアプリの初期化が実行される
- つまり、unicorn_configのbefore_forkが実行されるときには準備完了している
参考
unicornプロセスへのコマンドの対応表
- USR2: 新しいmasterを生成
- INT(TERM): 即座にプロセスkill
- QUIT: graceful shutdown