class Sinatra::Base

def dispatch!

Dispatch a request with error handling.
def dispatch!
  # Avoid passing frozen string in force_encoding
  @params.merge!(@request.params).each do |key, val|
    next unless val.respond_to?(:force_encoding)
    val = val.dup if val.frozen?
    @params[key] = force_encoding(val)
  end
  invoke do
    static! if settings.static? && (request.get? || request.head?)
    filter! :before
    route!
  end
rescue ::Exception => boom
  invoke { handle_exception!(boom) }
ensure
  begin
    filter! :after unless env['sinatra.static_file']
  rescue ::Exception => boom
    invoke { handle_exception!(boom) } unless @env['sinatra.error']
  end
end