所以發送USR2到麒麟是真棒 - 它開始了一個新的主用你的代碼的新副本,並自動拿起任何更改。甜。我的問題是:我如何阻止老主人?顯然接受的方式是在before_fork:重啓獨角獸與USR2 - 戒菸老師傅
before_fork do |server,worker|
old_pid = '/var/www/current/tmp/pids/unicorn.pid.oldbin'
if File.exists?(old_pid) && server.pid != 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
這樣做的問題是,一旦新的主(新工人)都產生了,他們殺舊主。因此,對站點的任何請求都只是坐在那裏等待新的工作人員啓動,通常在整個Rails堆棧加載時會持續幾秒鐘。
如果我刪除了我的before_fork,我希望從客戶端的角度來看,所有的工作都可以正常工作:我可以整天重新加載瀏覽器,並且每個請求都會被快速填充,沒有任何跡象表明新的主服務器何時接管比看到我的代碼更改現在顯示)。但是,老主人現在掛起,直到我手動發送一個QUIT。
據我知道有沒有回調,一旦工人加載完成,並準備爲客戶服務。這是我正在尋找的回調。我總是可以在Rails中創建一個初始化程序,尋找一個老主人並殺死它,但是這讓我的心痛得只是想着它而已。
必須有辦法!
我敢肯定after_fork由工人叫一旦被加載完畢後,你很可能把代碼有.. – 2012-05-29 05:48:27