我们在服务器中运行多个 cron 任务,我们使用 rails runner 启动它们,如下所示:
rails runner 'MyTask.run'
其中 MyTask
是项目中的一个类。问题是,我们使用 Bugsnag在任何事情失败时处理错误。当我们运行 rake 任务时,Bugsnag 会保存错误并将它们列在他们的网站上。但在使用 rails runner
时不会发生这种情况。发生这种情况时,如何配置 Rails 将错误发送给 Bugsnag?
最佳答案
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)。
关于ruby-on-rails - 使用 `rails runner` 时如何捕获错误并将它们发送到 Bugsnag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20935672/