ruby-on-rails - 使用 `rails runner` 时如何捕获错误并将它们发送到 Bugsnag?

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 bugsnag

我们在服务器中运行多个 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/

相关文章:

ruby - Maxmind Geoip 城市编码问题

ruby-on-rails - 如何链接到属于 Rails 3 中对象的下一条或上一条记录?

ruby-on-rails - 按字段中的位数查询 Rails

mysql - 需要mysql2 gem时出现段错误

ruby-on-rails - 当列为 NULL 时,ActiveRecords 返回什么值?

ruby-on-rails - 我是否必须为 Rails 应用程序中的外键显式生成迁移?

ruby-on-rails - Rails 3中缺少脚本/生成

ruby-on-rails - RVM 的 SQLite3 问题

ruby-on-rails - 在控制台中使用两个应用程序

ruby:此语法的名称,它拆分块的位置参数