我们在服务器上运行了几个cron任务,我们使用rails runner启动它们,如下所示:
rails runner 'MyTask.run'
其中MyTask
是项目中的一个类。问题是,我们使用Bugsnag来处理任何失败的错误。当我们运行rake任务时,Bugsnag会保存错误并将其列在他们的网站中。但使用rails runner
时不会发生这种情况。当发生这种情况时,如何配置rails以向Bugsnag发送错误?
答案 0 :(得分:4)
Rails runner非常难以配置或自定义。这是因为它真的是一个带有this main body的脚本:
if code_or_file.nil?
$stderr.puts "Run '#{$0} -h' for help."
exit 1
elsif File.exist?(code_or_file)
$0 = code_or_file
Kernel.load code_or_file
else
eval(code_or_file, binding, __FILE__, __LINE__)
end
正如您所看到的,它只是发送了eval
代码,因此没有包装器,没有可以扩展的类,基本上没有任何东西可以配置。最好创建一个rake任务来执行与runner相同的方式,但这次是在一个由Rake控制的环境中,因此允许你配置你需要的所有东西:
desc 'Wraps a runner command with rake'
task :runner, [:command] => :environment do |t, args|
eval(args[:command])
end
然后,您使用
调用它rake 'runner["MyTask.run"]'
这将以与使用rails runner
非常相似的方式运行任务,但是在rake(包括使用Bugsnag)的上下文中。