Action Dispatch ShowExceptions
此中間層會拯救應用程式傳回的任何例外,並呼叫例外應用程式,將其包裝成適合最終使用者查看的格式。
例外應用程式應該以參數形式傳遞給 ShowExceptions
初始化。每次有例外時,ShowExceptions
會將例外儲存在 env["action_dispatch.exception"]
中,將 PATH_INFO
改寫為例外狀態碼,並呼叫 Rack 應用程式。
在 Rails
應用程式中,可以使用 config.exceptions_app
配置例外應用程式,其預設值為 ActionDispatch::PublicExceptions
。
如果應用程式傳回的回應中,X-Cascade
標頭設定為 "pass"
,此中間層會傳送一個空回應作為結果,並附上正確的狀態碼。若例外應用程式內發生任何例外,此中間層會捕捉例外並傳回一個安全回應。
方法
類別公開的方法
new(app, exceptions_app) 連結
來源:顯示 | 在 GitHub 上
# 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) 連結
來源:顯示 | 在 GitHub 上
# 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