4

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

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

是否有一种 Rails 方法可以通过上下文一般捕获异常?

也许你用一些东西包装应用程序控制器?在 Django 中,您可以子类化视图...

4

1 回答 1

9

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

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
于 2015-09-07T21:14:08.120 回答