我的Rails应用程序中有许多清理脚本,它们都是从公共CleanupScript
类继承的所有类。为了运行清理脚本,我通常在每个文件的底部写Script.run unless Rails.env.test?
(以便它可以通过rails runner
运行。)
显然,这不是特别干,而且我认为超类中必须有一种方法可以自动设置它。我知道Kernel#at_exit
,但我不确定我是否可以在CleanupScript
内以某种方式使用它来知道要使用哪个脚本类,或者这是否是正确的过程?
答案 0 :(得分:1)
at_exit
似乎确实是解决此问题的合适方法,这就是我最终要做的事情:
class CleanupScript
cattr_accessor :autorun
self.autorun = !Rails.env.test?
def self.inherited(klass)
at_exit do
klass.run if klass.autorun
end
end
end
如果我想因某种原因禁用自动运行(并且还自动禁用测试环境的自动运行),则允许子类指定SubclassedCleanupScript.autorun = false
,但通常会在{{ 1}}。