![](/img/trans.png)
[英]Rails initializer (using JRuby, Puma) at_exit is occasionally not executed
[英]How can I ensure an operation runs before Rails exits, without using `at_exit`?
我有一个操作,我需要在我的Rails应用程序死亡之前在我的rails应用程序中执行。 我可以在Rails中使用这个钩子吗? 类似于at_exit
东西我猜。
Ruby本身支持两个钩子, BEGIN
和END
,它们在脚本的开头运行,并且当解释器停止运行它时。
有关更多信息,请参阅“ Ruby的BEGIN做什么? ”。
BEGIN
文档说:
通过代码块指定在程序的顺序执行开始之前无条件执行的代码。 有时用于模拟对方法的前向引用。
puts times_3(gets.to_i)
BEGIN {
def times_3(n)
n * 3
end
}
END
文件说:
通过代码块指定在程序终止之前执行的代码。
END { puts "Bye!" }
好吧所以我不保证影响,因为我根本没有测试过这个,但你可以定义自己的钩子,例如
ObjectSpace.define_finalizer(YOUR_RAILS_APP::Application, proc {puts "exiting now"})
请注意,这将在at_exit
之后执行,因此rails应用程序服务器输出将如下所示
Stopping ...
Exiting
exiting now
包括Tin Man的解决方案
ObjectSpace.define_finalizer(YOUR_RAILS_APP::Application, proc {puts "exiting now"})
END { puts "exiting again" }
输出是
Stopping ...
Exiting
exiting again
exiting now
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.