Object
This middleware is responsible for logging exceptions and showing a debugging page in case the request is local.
# File lib/action_dispatch/middleware/debug_exceptions.rb, line 14 14: def call(env) 15: begin 16: response = @app.call(env) 17: 18: if response[1]['X-Cascade'] == 'pass' 19: body = response[2] 20: body.close if body.respond_to?(:close) 21: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" 22: end 23: rescue Exception => exception 24: raise exception if env['action_dispatch.show_exceptions'] == false 25: end 26: 27: exception ? render_exception(env, exception) : response 28: end
# File lib/action_dispatch/middleware/debug_exceptions.rb, line 57 57: def log_error(env, wrapper) 58: logger = logger(env) 59: return unless logger 60: 61: exception = wrapper.exception 62: 63: trace = wrapper.application_trace 64: trace = wrapper.framework_trace if trace.empty? 65: 66: ActiveSupport::Deprecation.silence do 67: message = "\n#{exception.class} (#{exception.message}):\n" 68: message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code) 69: message << " " << trace.join("\n ") 70: logger.fatal("#{message}\n\n") 71: end 72: end
# File lib/action_dispatch/middleware/debug_exceptions.rb, line 74 74: def logger(env) 75: env['action_dispatch.logger'] || stderr_logger 76: end
# File lib/action_dispatch/middleware/debug_exceptions.rb, line 53 53: def render(status, body) 54: [status, {'Content-Type' => "text/html; charset=#{Response.default_charset}", 'Content-Length' => body.bytesize.to_s}, [body]] 55: end
# File lib/action_dispatch/middleware/debug_exceptions.rb, line 32 32: def render_exception(env, exception) 33: wrapper = ExceptionWrapper.new(env, exception) 34: log_error(env, wrapper) 35: 36: if env['action_dispatch.show_detailed_exceptions'] 37: template = ActionView::Base.new([RESCUES_TEMPLATE_PATH], 38: :request => Request.new(env), 39: :exception => wrapper.exception, 40: :application_trace => wrapper.application_trace, 41: :framework_trace => wrapper.framework_trace, 42: :full_trace => wrapper.full_trace 43: ) 44: 45: file = "rescues/#{wrapper.rescue_template}" 46: body = template.render(:template => file, :layout => 'rescues/layout') 47: render(wrapper.status_code, body) 48: else 49: raise exception 50: end 51: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.