跳至内容 跳至搜索

Action Dispatch ShowExceptions

此中间件会捕获应用程序返回的任何异常,并调用异常应用程序,该应用程序将以最终用户格式包装异常。

异常应用程序应作为ShowExceptions初始化时的参数传递。每次发生异常时,ShowExceptions都会将异常存储在env["action_dispatch.exception"]中,将PATH_INFO重写为异常状态代码,并调用 Rack 应用程序。

Rails应用程序中,异常应用程序可以使用config.exceptions_app配置,默认值为ActionDispatch::PublicExceptions.

如果应用程序返回的响应中将X-Cascade标头设置为"pass",则此中间件将作为结果发送空响应,并具有正确的状态代码。如果在异常应用程序内部发生任何异常,则此中间件将捕获异常并返回一个故障安全响应。

方法
C
N

类公共方法

new(app, exceptions_app)

# File actionpack/lib/action_dispatch/middleware/show_exceptions.rb, line 26
def initialize(app, exceptions_app)
  @app = app
  @exceptions_app = exceptions_app
end

实例公共方法

call(env)

# File actionpack/lib/action_dispatch/middleware/show_exceptions.rb, line 31
def call(env)
  @app.call(env)
rescue Exception => exception
  request = ActionDispatch::Request.new env
  backtrace_cleaner = request.get_header("action_dispatch.backtrace_cleaner")
  wrapper = ExceptionWrapper.new(backtrace_cleaner, exception)
  request.set_header "action_dispatch.exception", wrapper.unwrapped_exception
  request.set_header "action_dispatch.report_exception", !wrapper.rescue_response?

  if wrapper.show?(request)
    render_exception(request.dup, wrapper)
  else
    raise exception
  end
end