static private Method

Dispatcher.failsafe_response(output, status, exception = nil) { || ... }

If the block raises, send status code as a last-ditch response.

Source Code

# File dispatcher.rb, line 136
def failsafe_response(output, status, exception = nil)
  yield
rescue Exception  # errors from executed block
  begin
    output.write "Status: #{status}\r\n"

    if exception
      message    = exception.to_s + "\r\n" + exception.backtrace.join("\r\n")
      error_path = File.join(RAILS_ROOT, 'public', '500.html')

      if defined?(RAILS_DEFAULT_LOGGER) && !RAILS_DEFAULT_LOGGER.nil?
        RAILS_DEFAULT_LOGGER.fatal(message)

        output.write "Content-Type: text/html\r\n\r\n"

        if File.exists?(error_path)
          output.write(IO.read(error_path))
        else
          output.write("<html><body><h1>Application error (Rails)</h1></body></html>")
        end
      else
        output.write "Content-Type: text/plain\r\n\r\n"
        output.write(message)
      end
    end
  rescue Exception  # Logger or IO errors
  end
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.