| 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: yield server if block_given?
12: server.run.join
13: end
# 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