2012-01-16 11 views
5

私はRubyOnRailsプロジェクトを持っていて、それをUbuntuサーバー上のnginxにUnicornと共に配備しました。マスタープロセスを強制終了せずにUnicornをリロードするにはどうすればよいですか?

設定ファイルの1つを変更するとUnicornを再起動する必要がありますが、Unicornのマスタープロセスを強制終了してサイトをシャットダウンし、bundle execで再度起動します。

プロセスを強制終了せずに新しいファイルでUnicornを動作させる方法はありますか?私カピストラーノのdeploy.rbで

答えて

8

は私が持っている:

desc "Zero-downtime restart of Unicorn" 
task :restart, :except => { :no_release => true } do 
    run "kill -s USR2 unicorn_pid" 
end 

これは、よく "Lighting fast, zero-downtime deployments with git, capistrano, nginx and Unicorn" に記載されています。

+0

あなたのアドバイスで進捗しました。ありがとうございました 今、私は新しいエラーが発生しました。 「再起動」を入力してパスワードを入力すると、次のようになります。 ** ** [out :: app_name] $ rvm_path(/root/.rvm/)は存在しません。 *** [err :: app_name]/usr/local/rvm/bin/rvm-shell:行57:rvm:コマンドが見つかりません *** [err :: app_name]エラー:RVMで 'ruby -1.9.2-p290'' 私はGoogleからの結果を理解できれば、私は自分のrvm_path varを "/ usr/local/rvm/bin"に変更する必要があります(実際にはdirです)。どこでも。 – leitasat

+0

あなたがコード化したスクリプトを再起動しますか?このような場合には、使用する必要のあるrvmのバージョンを認識させるために、あなたのスクリプトに 'rvm use 1.9.2'を追加することができます。それ以外の場合は、回答を正しいものとしてマークし、rvm問題の新しい回答を開きます。私は助けてうれしい。 – tommasop

+0

さて、私は自分のrvmを修正しましたが(必要な宝石はありませんでした)、今はcapistranoが私のコマンドを確かにしているようですが、unicornは設定ファイルの変更を考慮しません。 (ワーカープロセスやデータベース設定の数など) – leitasat

0

受け付けたものを含め、両方の回答が悪いです。

http://unicorn.bogomips.org/SIGNALS.htmlは、HUPをマスタープロセスに送信します。

desc "Zero-downtime restart of Unicorn" 
task :restart, :except => { :no_release => true } do 
    run "kill -s HUP `cat tmp/pids/unicorn.pid`" 
end 
+0

質問はRELOAD(HUP)のやり方を尋ねるのではなく、すでにUSR2である – tommasop

関連する問題