| Class | Rack::Handler::Mongrel |
| In: |
lib/rack/handler/mongrel.rb
|
| Parent: | ::Mongrel::HttpHandler |
# 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
# 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