所以我必須在生產幾臺機器正在運行在機架頂部的西納特拉應用。通常情況下,所有的事情都是蠢蠢欲動的,直到Puppet - 我們用來將更改同步到我們的服務器 - 注意到項目的Gemfile.lock已更改,因此需要發出命令bundle install --binstubs --deployment
,以便我們獲得新的寶石。發生這種情況時,任何http請求在調用Bundler來請求我們的寶石時都會導致500錯誤,因爲新的寶石尚未安裝。架:在`束捆紮機:: GemNotFound錯誤安裝--deployment`
我們通常至少有一個機架過程遊逛由於另一個進程定期發出HTTP請求,以確保服務器是活的,但是當這種情況發生,沒有貨架的過程活着。如果問題出現在新實例中,PassengerMinInstances
指令可能會有所幫助,但我們也有一個定期提取頁面以測試服務器仍然運行的進程,所以至少應該有一個Rack進程處於活動狀態以處理請求。
我應該注意到,在bundle install
完成之後,木偶並沒有真正重新啓動Rack(通過touch
重新啓動restart.txt文件),因此我們的Rack進程在此時會消失時間。有沒有人遇到過這樣的事情?是否有一些Rack選項不能在我忽略的每個請求中重新加載整個環境?
有趣。如果您不介意對每個應用程序進行全面檢出(可能還有相關的寶石),那麼這不是一個糟糕的解決方案。如果你經常部署,那麼這是一個很大的帶寬。 – tjarratt 2012-02-07 03:24:27