2012-01-16 80 views
5

我有一個RubyOnRails項目,並將它與Unicorn一起部署在Ubuntu服務器上的nginx上。如何在不殺死主進程的情況下重新加載獨角獸?

我需要重新啓動Unicorn,如果我更改了一個配置文件,但是當我殺死Unicorn的主進程並使用bundle exec重新啓動它時,它會使我的站點關閉。

有沒有什麼辦法可以讓Unicorn在不殺死進程的情況下使用新文件進行工作?

回答

8

在我Capistrano的deploy.rb我:

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

我已經取得了一些進展與您的意見,謝謝 但現在我有新的錯誤。當我輸入「cap restart」並輸入我的密碼時,我有以下: '** [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'' 如果我能理解谷歌的結果,我需要將我的rvm_path var更改爲「/ usr/local/rvm/bin」(它確實存在目錄),但我無法找到它任何地方。 – leitasat 2012-01-17 01:04:23

+0

重啓你編碼的腳本?如果出現這種情況,您可以在腳本中添加一個'rvm use 1.9.2',使其知道您需要使用的rvm版本。否則,請將答案標記爲正確併爲rvm問題打開一個新的答案。我很樂意提供幫助。 – tommasop 2012-01-17 08:17:42

+0

好的,我已經修復了我的rvm(沒有必要的寶石),現在看起來capistrano當然會執行我的命令,但是獨角獸並沒有考慮到我在配置文件中的更改。 (例如,工作進程或數據庫設置的數量) – leitasat 2012-01-17 15:58:40

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 2013-04-23 09:34:22

相關問題