获取 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 请求,就像任何其他请求一样,丢失了您所追求的异常上下文。相反,您可能希望使用 ActionController
的 Rescue 功能。它看起来像这样:
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
。
因此,我使用错误控制器处理异常,以便在生产环境中向我的用户显示动态内容。我在我的路线文件中有它要做:
# 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 请求,就像任何其他请求一样,丢失了您所追求的异常上下文。相反,您可能希望使用 ActionController
的 Rescue 功能。它看起来像这样:
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
。