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