Rails - delayed_job应用程序变量(讨论不多)

时间:2014-03-09 11:21:03

标签: ruby-on-rails delayed-job

我在Rails中有一个关于delayed_job的问题似乎没有被提及太多。

当您运行延迟的作业时,似乎没有从ApplicationController加载任何内容。我们在ApplicationController中有一些代码可以使用自定义记录器:

def setup_logger
  logfile = File.open("#{RAILS_ROOT}/log/audit.log", 'a')
  @audit_log = Logger.new(logfile)
  $audit_log = @audit_log
end

然后我们通过代码引用$ audit_log。但是因为DelayedJob没有加载ApplicationController,所以这个变量是nil而且我们得到了错误。

所以Delayed_job只是盲目地运行指定的方法,这也可能是危险的 如果您依赖before_filters来检查数据或验证事物。

我们如何解决让DelayedJob知道我们的全局日志记录变量的问题?我们不希望通过代码显式定义记录器。 人们怎么处理这个问题,因为它似乎应该是常见的,但它没有被多谈。

由于

1 个答案:

答案 0 :(得分:0)

为什么你认为,Job必须运行ApplicationController?

作业,正是运行该作业的工人,加载环境,当然,但不是控制器......

如果您不想在初始化程序中使用它,为什么不使用一种配置对象来存储此类数据并在作业中引用它?

而不是单独在每个作业中进行,我建议在BaseJob中设置记录器,并在继承的作业中使用它来满足您的需要。

另一个建议是,如果可以,请不要使用延迟工作,请使用http://mperham.github.io/sidekiq/或至少https://github.com/resque/resque