28: def self.serve(request, app)
29: env = request.env
30: env.delete "HTTP_CONTENT_LENGTH"
31:
32: request.in.extend ProperStream
33:
34: env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/"
35:
36: env.update({"rack.version" => [0,1],
37: "rack.input" => request.in,
38: "rack.errors" => request.err,
39:
40: "rack.multithread" => false,
41: "rack.multiprocess" => true,
42: "rack.run_once" => false,
43:
44: "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
45: })
46:
47: env["QUERY_STRING"] ||= ""
48: env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
49: env["REQUEST_PATH"] ||= "/"
50: env.delete "PATH_INFO" if env["PATH_INFO"] == ""
51:
52: status, headers, body = app.call(env)
53: begin
54: send_headers request.out, status, headers
55: send_body request.out, body
56: ensure
57: body.close if body.respond_to? :close
58: request.finish
59: end
60: end