Class Rack::Handler::Mongrel
In: lib/rack/handler/mongrel.rb
Parent: ::Mongrel::HttpHandler

Methods

new   process   run  

Public Class methods

[Source]

    # File lib/rack/handler/mongrel.rb, line 15
15:       def initialize(app)
16:         @app = app
17:       end

[Source]

    # File lib/rack/handler/mongrel.rb, line 7
 7:       def self.run(app, options={})
 8:         server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
 9:                                            options[:Port] || 8080)
10:         server.register('/', Rack::Handler::Mongrel.new(app))
11:         yield server  if block_given?
12:         server.run.join
13:       end

Public Instance methods

[Source]

    # File lib/rack/handler/mongrel.rb, line 19
19:       def process(request, response)
20:         env = {}.replace(request.params)
21:         env.delete "HTTP_CONTENT_TYPE"
22:         env.delete "HTTP_CONTENT_LENGTH"
23: 
24:         env["SCRIPT_NAME"] = ""  if env["SCRIPT_NAME"] == "/"
25: 
26:         env.update({"rack.version" => [0,1],
27:                      "rack.input" => request.body || StringIO.new(""),
28:                      "rack.errors" => STDERR,
29: 
30:                      "rack.multithread" => true,
31:                      "rack.multiprocess" => false, # ???
32:                      "rack.run_once" => false,
33: 
34:                      "rack.url_scheme" => "http",
35:                    })
36:         env["QUERY_STRING"] ||= ""
37:         env.delete "PATH_INFO"  if env["PATH_INFO"] == ""
38: 
39:         status, headers, body = @app.call(env)
40: 
41:         begin
42:           response.status = status.to_i
43:           headers.each { |k, vs|
44:             vs.each { |v|
45:               response.header[k] = v
46:             }
47:           }
48:           body.each { |part|
49:             response.body << part
50:           }
51:           response.finished
52:         ensure
53:           body.close  if body.respond_to? :close
54:         end
55:       end

[Validate]