我们在我们的服务器上运行了几个 cron 任务,我们使用 rails runner 来启动它们,像这样:
rails runner 'MyTask.run'
MyTask
项目中的类在哪里。问题是,我们使用Bugsnag来处理错误以防万一发生任何故障。当我们运行 rake 任务时,Bugsnag 会保存错误并在他们的网站上列出它们。但是在使用时不会发生这种情况rails runner
。发生这种情况时,如何配置 Rails 以将错误发送到 Bugsnag?
我们在我们的服务器上运行了几个 cron 任务,我们使用 rails runner 来启动它们,像这样:
rails runner 'MyTask.run'
MyTask
项目中的类在哪里。问题是,我们使用Bugsnag来处理错误以防万一发生任何故障。当我们运行 rake 任务时,Bugsnag 会保存错误并在他们的网站上列出它们。但是在使用时不会发生这种情况rails runner
。发生这种情况时,如何配置 Rails 以将错误发送到 Bugsnag?
Rails runner 很难配置或定制。那是因为它实际上是一个带有这个主体的脚本:
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"]'
这将以与 using 非常相似的方式运行任务rails runner
,但在 rake 的上下文中(包括使用 Bugsnag)。