获取 Rails 路由器中的异常内容

Get exception content in Rails Router

因此,我使用错误控制器处理异常,以便在生产环境中向我的用户显示动态内容。我在我的路线文件中有它要做:

  # Errors
  %w( 404 422 500 ).each do |code|
    get code, :to => "errors#show", :code => code
  end

现在唯一的问题是我正在路由错误,例如当我想通知 Airbrake 时我在控制器中丢失了信息。如何维护异常信息并将其发送到 500 上的 Airbrake?现在我得到的只是异常发生时发生的环境,这对调试目的帮助不大。

class ErrorsController < ApplicationController

  def show
    notify_airbrake(env) 
    render status_code.to_s, :status => status_code
  end

  protected

  def status_code
    params[:code] || 500
  end

end

您是否通过重定向到 http://your.site/500 之类的 URL 来处理错误?这将只是一个 HTTP 请求,就像任何其他请求一样,丢失了您所追求的异常上下文。相反,您可能希望使用 ActionControllerRescue 功能。它看起来像这样:

class ApplicationController < ActionController::Base
  rescue_from StandardError, with: :render_error

  private

  def render_error(error)
    notify_airbrake(error)
    render text: 500, status: 500
  end
end

您可以添加多个 rescue_from 声明来处理不同类型的错误,例如 Rails 指南示例中的 ActiveRecord::RecordNotFound