0

我的 Rails 应用程序中有许多清理脚本,它们都是从公共类继承的所有CleanupScript类。为了运行清理脚本,我通常会写Script.run unless Rails.env.test?在每个文件的底部(以便它可以运行通过rails runner)。

显然,这并不是特别干燥,我认为超类中必须有一种方法可以自动设置它。我知道Kernel#at_exit,但我不确定我是否可以在其中使用它CleanupScript来知道要使用哪个脚本类,或者这是否是正确的过程?

4

1 回答 1

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我是否要出于某种原因禁用自动运行(并且还自动禁用测试环境的自动运行),但通常会在其脚本加载时自动运行该类rails runner

于 2013-09-19T18:02:56.487 回答