Ruby on Railsでコードを書き換えた場合、アプリケーションサーバーを再起動して反映する必要があるケースに直面します。
unicornを使用している場合、killで以下の3種類のシグナルをunicornのマスターに送ることで新しいサーバープロセスに入れ替えできます。
- USR2: 新しいプロセスが起動する
- WINCH: 旧プロセスのworkerが順次終了する
- QUIT: 旧プロセスのmasterが終了する
以下のようなシェルスクリプトを用意しておくことで、再起動処理を行えます。なお、プロセスIDについては、Railsプロジェクトのconfig/unicorn.rbでpid "/tmp/unicorn.pid"
のように設定できます。
#!/bin/bash
pid=`cat /tmp/unicorn.pid`
echo "starting new server..."
kill -s USR2 $pid
sleep 3
echo "stopping old worker..."
kill -s WINCH $pid
sleep 3
echo "stopping old master..."
kill -s QUIT $pid</pre>
Railsをdockerで動作させている場合でも、このスクリプトをコンテナ内に置いておけば、 docker execでコンテナ外からunicornを再起動できます。
⁋ 2015/11/01↻ 2024/11/07
中馬崇尋
Chuma Takahiro
Chuma Takahiro