2013-08-17 79 views
0

我在使用獨角獸應用服務器的Rails應用程序上運行電子商務紅寶石。 ruby版本是2.0.0,rails版本是3.2.14。我正在運行Nginx作爲Web服務器。當我將代碼推送到服務器時,我需要重新啓動獨角獸應用程序服務器,這會導致網站中出現藍屏/嗶嗶聲,我搜索瞭解該解決方案,但似乎沒有任何工作。我之前使用乘客很好。獨角獸熱重啓與紅寶石2.0.0和Rails 3.2.14

在重新啓動期間是否有任何方法可以避免blup,從而保持零停機時間。

回答

1

如果您將USR2發送給麒麟主人,它將導致麒麟工人重新啓動,並且應該導致重啓宕機時間爲零。與發送USR2信號:

kill -s USR2 process-id-of-master-process 

與麒麟主的數字進程標識更換過程-ID-的主處理(用ps AGX找到| grep的麒麟,還是看在PID的文件夾unicorn.pid

注意,如果麒麟捆紮機下運行,你仍然需要做的,只要你改變的Gemfile冷啓動,爲了使新的Gemfile被拾起。

+0

我使用「束exec unicorn -D -c $ APP_ROOT/config/unicorn.rb -E production「這個命令啓動獨角獸。 –

+2

發送USR2信號給你的主進程,工作人員將會我拿起任何新的應用程序代碼,除了Gemfile。所以,如果你不改變Gemfile,USR2是你的零停機重啓票。如果您使用USR2,則無需重新運行軟件包管理器,並且如果新應用程序無法重新啓動,則舊軟件仍會運行。如果你改變了Gemfile,把QUIT信號發送給主設備,然後運行你的bundle exec unicorn ...命令來啓動一個新的獨角獸主設備,但這不會是一個零宕機重啓,並且如果出現問題你的應用程序並沒有啓動,你一直在等待它的修復。 – nachbar

+0

kill -s USR2 process-id-of-master-process對我來說工作正常。使用上述命令後,它會創建另外兩個新進程,它們爲最新的代碼提供服務,但舊的子進程仍然存在,並且它也服務於舊代碼。我應該殺死舊的子進程嗎?/有什麼解決方案? –