Class: ActionDispatch::ShowExceptions

Inherits:
Object
  • Object
show all
Defined in:
actionpack/lib/action_dispatch/middleware/show_exceptions.rb

Overview

This middleware rescues any exception returned by the application and calls an exceptions app that will wrap it in a format for the end user.

The exceptions app should be passed as parameter on initialization of ShowExceptions. Every time there is an exception, ShowExceptions will store the exception in env, rewrite the PATH_INFO to the exception status code and call the rack app.

If the application returns a “X-Cascade” pass response, this middleware will send an empty response as result with the correct status code. If any exception happens inside the exceptions app, this middleware catches the exceptions and returns a FAILSAFE_RESPONSE.

Constant Summary collapse

FAILSAFE_RESPONSE =
[500, { 'Content-Type' => 'text/plain' },
      ["500 Internal Server Error\n" \
"If you are the administrator of this website, then please read this web " \
"application's log file and/or the web server's log file to find out what " \
"went wrong."]]

Instance Method Summary collapse

Constructor Details

#initialize(app, exceptions_app) ⇒ ShowExceptions

Returns a new instance of ShowExceptions.



24
25
26
27
# File 'actionpack/lib/action_dispatch/middleware/show_exceptions.rb', line 24

def initialize(app, exceptions_app)
  @app = app
  @exceptions_app = exceptions_app
end

Instance Method Details

#call(env) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'actionpack/lib/action_dispatch/middleware/show_exceptions.rb', line 29

def call(env)
  @app.call(env)
rescue Exception => exception
  if env['action_dispatch.show_exceptions'] == false
    raise exception
  else
    render_exception(env, exception)
  end
end