module ActionController #:nodoc: # Actions that fail to perform as expected throw exceptions. These # exceptions can either be rescued for the public view (with a nice # user-friendly explanation) or for the developers view (with tons of # debugging information). The developers view is already implemented by # the Action Controller, but the public view should be tailored to your # specific application. # # The default behavior for public exceptions is to render a static html # file with the name of the error code thrown. If no such file exists, an # empty response is sent with the correct status code. # # You can override what constitutes a local request by overriding the # local_request? method in your own controller. Custom rescue # behavior is achieved by overriding the rescue_action_in_public # and rescue_action_locally methods. module Rescue extend ActiveSupport::Concern included do include ActiveSupport::Rescuable end module ClassMethods # This can be removed once we can move action(:_rescue_action) into middlewares.rb # Currently, it does controller.method(:rescue_action), which is hiding the implementation # difference between the old and new base. def rescue_action(env) action(:_rescue_action).call(env) end end attr_internal :rescued_exception private def method_for_action(action_name) return action_name if self.rescued_exception = request.env.delete("action_dispatch.rescue.exception") super end def _rescue_action rescue_with_handler(rescued_exception) || raise(rescued_exception) end def process_action(*) super rescue Exception => exception self.rescued_exception = exception _rescue_action end end end