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 14
14:       def initialize(app)
15:         @app = app
16:       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:         server.run.join
12:       end

Public Instance methods

[Source]

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

[Validate]