【问题标题】:How to catch errors and send them to Bugsnag when using `rails runner`?使用`rails runner`时如何捕获错误并将它们发送到Bugsnag?
【发布时间】:2014-01-05 15:59:55
【问题描述】:

我们正在我们的服务器上运行几个 cron 任务,我们使用 rails runner 启动它们,如下所示:

rails runner 'MyTask.run'

其中MyTask 是项目中的一个类。问题是,我们使用Bugsnag 来处理错误,以防万一失败。当我们运行 rake 任务时,Bugsnag 会保存错误并在他们的网站上列出它们。但是在使用rails runner 时不会发生这种情况。发生这种情况时如何配置 Rails 以向 Bugsnag 发送错误?

【问题讨论】:

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


    【解决方案1】:

    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)。

    【讨论】:

    • Railties 在rails runner 中运行时仍然有效。我刚刚确认,从rails runner script.rb 提出错误将这些错误发送到 BugSnag。
    猜你喜欢
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2022-11-23
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多