我在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知道我们的全局日志记录变量的问题?我们不希望通过代码显式定义记录器。 人们怎么处理这个问题,因为它似乎应该是常见的,但它没有被多谈。
由于
答案 0 :(得分:0)
为什么你认为,Job必须运行ApplicationController?
作业,正是运行该作业的工人,加载环境,当然,但不是控制器......
如果您不想在初始化程序中使用它,为什么不使用一种配置对象来存储此类数据并在作业中引用它?
而不是单独在每个作业中进行,我建议在BaseJob中设置记录器,并在继承的作业中使用它来满足您的需要。
另一个建议是,如果可以,请不要使用延迟工作,请使用http://mperham.github.io/sidekiq/或至少https://github.com/resque/resque