2010-02-11 27 views
2

我正在運行一個在初始化器中啓動Rufus調度器進程的應用程序。該應用程序正在使用Passenger生產,我注意到一些奇怪的行爲:Rails在生產中不斷重啓乘客

首先,爲了重新啓動服務器並確保初始化程序運行,您必須同時使用touch tmp/restart.txt並在瀏覽器中加載應用程序。那時,初始化器會觸發。可怕的是,如果你只做了觸摸,Rufus計劃的進程就會重置,並且不會重新計劃,直到您在瀏覽器中加載應用程序。

只有這一點我可以處理。但是這會導致第二個問題:我會注意到計劃的進程沒有運行,所以我加載了一個頁面,突然間日誌文件告訴我它正在運行初始化程序,就好像我重新啓動了一樣。因此,在某些時候,Passenger會隨機重新啓動,就好像我碰到了tmp/restart.txt並清除了我的預定進程。

我對乘客和Rails的集成有一個難以置信的理解,所以我不知道這種偶爾的重新啓動是異常的還是全部架構的一部分。任何人都可以就這種情況提供任何智慧

回答

2

你描述的是乘客的工作方式。它在流量保證時產生應用程序的新實例,並在閒置一段時間後關閉它們以釋放資源。

您應該閱讀Passenger文檔,特別是Resource Control and Optimization section。有些設置可以防止Passenger關閉應用程序,如果這是你想要的。

使用PassengerPoolIdleTime設置,您可以保持至少一個進程在運行,但您幾乎可以肯定希望Passenger根據需要啓動應用程序的其他實例。 Rufus Scheduler上的This thread Google Group提到使用鎖定文件來阻止多個進程啓動調度程序,這對您可能很有用。

+0

實際上,您可以使用PassengerMinInstances(Apache)或passenger_min_instances(nginx)來保持一個進程始終運行。我認爲這是更新的Passenger版本,當傑夫的回覆首次發佈時可能還沒有發佈。儘管如此,您仍然需要Rufus調度程序鎖定文件,因爲您不知道哪個Passenger實例將被終止,只有總是至少有1個。 – alvin 2011-04-05 23:33:50

相關問題