将所有控制器操作包装在 begin rescue 中以记录错误

Wrap all controller actions in a begin rescue for error logging

我最近为我的 rails 应用设置了 Rollbar。它报告错误但并不总是与上下文相关。为了获取上下文,您需要捕获异常并传入错误

begin
  # code...
rescue => e
  Rollbar.error(e)

有没有一种 rails 方法可以通过上下文捕获异常?

也许你用什么包裹了应用程序控制器?在 Django 中,您可以将视图子类化...

假设您的所有控制器都继承自 ApplicationController,您可以在 ApplicationController 中使用 rescue_from 来挽救任何控制器中的任何错误。

ApplicationController < ActionController::Base

  rescue_from ActiveRecord::RecordNotFound do |exception|
    message = "Couldn't find a record."
    redirect_to no_record_url, info: message
  end

end

您可以为不同的错误 类 设置多个 rescue_from 子句,但请注意它们的调用顺序是相反的,因此通用 rescue_from 应该列在其他子句之前。 .

ApplicationController < ActionController::Base

  rescue_from do |exception|
    message = "some unspecified error"
    redirect_to rescue_message_url, info: message
  end

  rescue_from ActiveRecord::RecordNotFound do |exception|
    message = "Couldn't find a record."
    redirect_to rescue_message_url, info: message
  end

end