| Class | Rack::Handler::WEBrick |
| In: |
lib/rack/handler/webrick.rb
|
| Parent: | WEBrick::HTTPServlet::AbstractServlet |
# File lib/rack/handler/webrick.rb, line 14
14: def initialize(server, app)
15: super server
16: @app = app
17: end
# File lib/rack/handler/webrick.rb, line 7
7: def self.run(app, options={})
8: server = ::WEBrick::HTTPServer.new(options)
9: server.mount "/", Rack::Handler::WEBrick, app
10: trap(:INT) { server.shutdown }
11: server.start
12: end
# File lib/rack/handler/webrick.rb, line 19
19: def service(req, res)
20: env = req.meta_vars
21: env.delete_if { |k, v| v.nil? }
22:
23: env.update({"rack.version" => [0,1],
24: "rack.input" => StringIO.new(req.body.to_s),
25: "rack.errors" => STDERR,
26:
27: "rack.multithread" => true,
28: "rack.multiprocess" => false,
29: "rack.run_once" => false,
30:
31: "rack.url_scheme" => ["yes", "on", "1"].include?(ENV["HTTPS"]) ? "https" : "http"
32: })
33:
34: env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
35: env["QUERY_STRING"] ||= ""
36: env["REQUEST_PATH"] ||= "/"
37: env.delete "PATH_INFO" if env["PATH_INFO"] == ""
38:
39: status, headers, body = @app.call(env)
40: begin
41: res.status = status.to_i
42: headers.each { |k, vs|
43: vs.each { |v|
44: res[k] = v
45: }
46: }
47: body.each { |part|
48: res.body << part
49: }
50: ensure
51: body.close if body.respond_to? :close
52: end
53: end