我有一个操作,我需要在我的Rails应用程序死之前在我的rails应用程序中执行。我可以在Rails中使用这个钩子吗?类似于at_exit
的东西我估计。
答案 0 :(得分:6)
Ruby本身支持两个钩子BEGIN
和END
,它们在脚本开始时运行,并且解释器停止运行它。
参见" What does Ruby's BEGIN do?"了解更多信息。
BEGIN
文档说:
通过代码块指定在程序的顺序执行开始之前无条件执行的代码。有时用于模拟对方法的前向引用。
puts times_3(gets.to_i)
BEGIN {
def times_3(n)
n * 3
end
}
END
文件说:
通过代码块指定在程序终止之前执行的代码。
END { puts "Bye!" }
答案 1 :(得分:3)
好的,所以我不保证影响,因为我根本没有测试过这个,但你可以定义自己的钩子,例如。
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