【问题标题】:In Rails, can I throw an exception but keep going?在 Rails 中,我可以抛出异常但继续吗?
【发布时间】:2015-04-09 03:14:23
【问题描述】:

我在 Rails 中有一些东西可以处理大量事件。所有事件都是相互独立的。如果其中一个事件格式不正确或其他什么,它现在就会爆炸,并停止处理之后的事件。

我想改为尝试/捕获,然后通过堆栈跟踪等将错误传播到我们所有的各种错误跟踪服务(New Relic、日志等)。有什么好办法吗?

我本质上希望它表现得好像错误没有被捕获,用于跟踪,但继续进行,用于事件处理。

【问题讨论】:

  • 你不能在 Ruby 中做到这一点。由处理异常的任何代码来恢复处理下一条记录。执行流程不能一直跟随异常到堆栈上发生错误报告的地方,然后再回到抛出异常的地方。您需要捕获异常并明确记录它,而不是依赖某些顶级错误跟踪软件。

标签: ruby-on-rails ruby-on-rails-4 error-handling


【解决方案1】:

是的,这是很有可能的。例如,让我们处理一堆事件。我们将拯救所有 StandardError 的后代错误,将它们记录到 honeybadger.io,并继续处理剩余的事件:

events.each do |event|
  begin
    process(event)
  rescue StandardError => error
    Honeybadger.notify(error)
  end
end

【讨论】:

    【解决方案2】:

    您可以挽救错误,将其传递给 NewRelic,然后继续您的快乐之路...

    def my_method
      # do things...
    rescue => exception
      NewRelic::Agent.notice_error(exception)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多