2014-02-06 16 views
4

我正在編寫一個完整性檢查初始化程序,該程序在應對某些屬性時應該終止Rails進程。以這種方式中止生產服務器的啓動過程最安全的方法是什麼?我想一個極端的案例正在運行exit,但我不確定這是否是最好的方法。從初始化程序終止當前的Rails實例

在獨角獸上運行,如果重要的話。

回答

3

有三種方式來結束紅寶石過程:

  • exit將結束狀態爲0(成功)的過程。
  • exit!將以狀態1結束(這似乎適合您的情況),也不會運行使用Kernel#at_exit(可能對您不太合適)定義的塊。
  • abort將以狀態1結束,並且運行Kernel#at_exit塊。你也可以給它一個字符串,將其發送到標準輸出。

因此abort可能是您最好的選擇。除非你有特別的理由不運行Kernel#at_exit塊,否則你可能想運行它們。

由於獨角獸一次運行初始化程序,然後分叉過程,這種方法應該沒問題。

我會補充一點,我猜你是在「錯誤」級別進行這些檢查 - 如果可能的話,你應該檢查你的環境是否超出了rails的環境。但是我不知道你的情況,我意識到有時解決方案的敏捷性比它的優雅更有價值。 :)

+0

很好的答案。我同意通常應該在monit等中進行檢查,但有時會有初始化配置,如果出現意想不到的情況,可能會阻止進程。 – mahemoff

+0

順便說一句,我最初做了一個錯字,並有'exit'和'exit!'交換。現在修好。 –