2012-02-29 8 views
5

ここで私の展開戦略について少し混乱していますが、どこの状況で展開すればreloadシグナルをユニコードに送信したいのですか?私は、なぜ思ったんだけどUnicornでは `restart`ではなく` reload`を使用しますか?

bundle exec unicorn -c config/unicorn/production.rb -E production -D 

:私は、その後のようなものを経由して再びユニコーンを開始、そのPIDを殺すことで自分のアプリケーションを展開してきた

sudo kill -s USR2 `cat /home/deploy/apps/my_app/current/tmp/pids/unicorn.pid` 

:たとえば私の場合、それは次のようになりますリロードを使いたいですか?そうすることで、展開のためのパフォーマンスを得ることはできますか?

答えて

14

ユニコーンを強制終了すると、ユニコンがバックアップを開始できるようになるまで、ダウンタイムが発生します。 USR2信号を使用すると、ユニコンは新しいワーカーを最初に起動し、実行した後は古いワーカーを殺します。基本的には、ユニコーンを「切る」必要性を取り除くことです。

古いユニコーンプロセスのPIDを含む ".​​oldbin"ファイルが見つかると、古い労働者の殺害を処理するために、文書化されたbefore_forkフックがユニコーン構成にあることを前提としています:

before_fork do |server, worker| 
    # a .oldbin file exists if unicorn was gracefully restarted with a USR2 signal 
    # we should terminate the old process now that we're up and running 
    old_pid = "#{pids_dir}/unicorn.pid.oldbin" 
    if File.exists?(old_pid) 
    begin 
     Process.kill("QUIT", File.read(old_pid).to_i) 
    rescue Errno::ENOENT, Errno::ESRCH 
     # someone else did our job for us 
    end 
    end 
end 
関連する問題