Skip to Content Skip to Search

Action Dispatch PublicExceptions

When called, this middleware renders an error page. By default if an HTML response is expected it will render static error pages from the /public directory. For example when this middleware receives a 500 response it will render the template found in /public/500.html. If an internationalized locale is set, this middleware will attempt to render the template in /public/500.<locale>.html. If an internationalized template is not found it will fall back on /public/500.html.

When a request with a content type other than HTML is made, this middleware will attempt to convert error information into the appropriate response type.

Methods
C
N

Attributes

[RW] public_path

Class Public methods

new(public_path)

# File actionpack/lib/action_dispatch/middleware/public_exceptions.rb, line 19
def initialize(public_path)
  @public_path = public_path
end

Instance Public methods

call(env)

# File actionpack/lib/action_dispatch/middleware/public_exceptions.rb, line 23
def call(env)
  request      = ActionDispatch::Request.new(env)
  status       = request.path_info[1..-1].to_i
  begin
    content_type = request.formats.first
  rescue ActionDispatch::Http::MimeNegotiation::InvalidType
    content_type = Mime[:text]
  end
  body = { status: status, error: Rack::Utils::HTTP_STATUS_CODES.fetch(status, Rack::Utils::HTTP_STATUS_CODES[500]) }

  render(status, content_type, body)
end