Sha256: dfd57e073e029384736f3a1d55c27fdc948f77b45f2ff56b58a032494735953d

Contents?: true

Size: 1.32 KB

Versions: 3

Compression:

Stored size: 1.32 KB

Contents

require 'dispatcher'
require 'net/ajp13/server'
require File.dirname(__FILE__) + File::SEPARATOR + 'rails-wrapper.rb'

class AjpRailsDispatcher < Dispatcher
  class << self
    # Dispatch the given AJP request, using the given session options, and
    # returns the response object. 
    #--
    # Be sure to handle the exceptions it raises
    # on multipart requests (EOFError and ArgumentError).
    #++
    def dispatch(ajp_req, session_options, server_environments)
      request = AjpRailsRequest.new(ajp_req, session_options, server_environments)
      response = AjpRailsResponse.new
      prepare_application
      ActionController::Routing::Routes.recognize!(request).process(request, response).to_ajp_response(ajp_req.output_cookies)
    rescue Object => exception
      puts exception.message + ":" + exception.backtrace.join("\n")
      failsafe_response(500) do
        ActionController::Base.process_with_exception(request, AjpRailsResponse.new, exception).to_ajp_response(ajp_req.output_cookies)
      end
    ensure
      # Do not give a failsafe response here.
      reset_after_dispatch
    end

    # If the block raises, send status code as a last-ditch response.
    def failsafe_response(status)
      yield
    rescue Object
      begin
        Net::AJP13::Response.new(status)
      rescue Object
      end
    end
  end
end


Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ajp-rails-0.0.0 lib/ajp-rails/ajp_rails_dispatcher.rb
ajp-rails-0.0.1 lib/ajp-rails/ajp_rails_dispatcher.rb
ajp-rails-0.0.2 lib/ajp-rails/ajp_rails_dispatcher.rb