跳到內文 跳到搜尋

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