繁体   English   中英

如何在不使用`at_exit`的情况下确保在Rails退出之前运行一个操作?

[英]How can I ensure an operation runs before Rails exits, without using `at_exit`?

我有一个操作,我需要在我的Rails应用程序死亡之前在我的rails应用程序中执行。 我可以在Rails中使用这个钩子吗? 类似于at_exit东西我猜。

Ruby本身支持两个钩子, BEGINEND ,它们在脚本的开头运行,并且当解释器停止运行它时。

有关更多信息,请参阅“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM