4
我正在编写一个完整性检查初始化程序,该程序在应对某些属性时应该终止Rails进程。以这种方式中止生产服务器的启动过程最安全的方法是什么?我想一个极端的案例正在运行exit
,但我不确定这是否是最好的方法。从初始化程序终止当前的Rails实例
在独角兽上运行,如果重要的话。
我正在编写一个完整性检查初始化程序,该程序在应对某些属性时应该终止Rails进程。以这种方式中止生产服务器的启动过程最安全的方法是什么?我想一个极端的案例正在运行exit
,但我不确定这是否是最好的方法。从初始化程序终止当前的Rails实例
在独角兽上运行,如果重要的话。
有三种方式来结束红宝石过程:
exit
将结束状态为0(成功)的过程。exit!
将以状态1结束(这似乎适合您的情况),也不会运行使用Kernel#at_exit
(可能对您不太合适)定义的块。abort
将以状态1结束,并且将运行Kernel#at_exit
块。你也可以给它一个字符串,将其发送到标准输出。因此abort
可能是您最好的选择。除非你有特别的理由不运行Kernel#at_exit
块,否则你可能想运行它们。
由于独角兽一次运行初始化程序,然后分叉过程,这种方法应该没问题。
我会补充一点,我猜你是在“错误”级别进行这些检查 - 如果可能的话,你应该检查你的环境是否超出了rails的环境。但是我不知道你的情况,我意识到有时解决方案的敏捷性比它的优雅更有价值。 :)
很好的答案。我同意通常应该在monit等中进行检查,但有时会有初始化配置,如果出现意想不到的情况,可能会阻止进程。 – mahemoff
顺便说一句,我最初做了一个错字,并有'exit'和'exit!'交换。现在修好。 –