2014-02-06 18 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!'交换。现在修好。 –