我有一個RubyOnRails項目,並將它與Unicorn一起部署在Ubuntu服務器上的nginx上。如何在不殺死主進程的情況下重新加載獨角獸?
我需要重新啓動Unicorn,如果我更改了一個配置文件,但是當我殺死Unicorn的主進程並使用bundle exec
重新啓動它時,它會使我的站點關閉。
有沒有什麼辦法可以讓Unicorn在不殺死進程的情況下使用新文件進行工作?
我有一個RubyOnRails項目,並將它與Unicorn一起部署在Ubuntu服務器上的nginx上。如何在不殺死主進程的情況下重新加載獨角獸?
我需要重新啓動Unicorn,如果我更改了一個配置文件,但是當我殺死Unicorn的主進程並使用bundle exec
重新啓動它時,它會使我的站點關閉。
有沒有什麼辦法可以讓Unicorn在不殺死進程的情況下使用新文件進行工作?
在我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」 是有據可查的。
這兩個答案,包括接受的答案都是不好的。
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
問題不在於如何RELOAD(這是HUP),而是如何優雅地重啓已經是USR2 – tommasop 2013-04-23 09:34:22
我已經取得了一些進展與您的意見,謝謝 但現在我有新的錯誤。當我輸入「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
重啓你編碼的腳本?如果出現這種情況,您可以在腳本中添加一個'rvm use 1.9.2',使其知道您需要使用的rvm版本。否則,請將答案標記爲正確併爲rvm問題打開一個新的答案。我很樂意提供幫助。 – tommasop 2012-01-17 08:17:42
好的,我已經修復了我的rvm(沒有必要的寶石),現在看起來capistrano當然會執行我的命令,但是獨角獸並沒有考慮到我在配置文件中的更改。 (例如,工作進程或數據庫設置的數量) – leitasat 2012-01-17 15:58:40