Parent

Class Index [+]

Quicksearch

Rack::Handler::SCGI

Attributes

app[RW]

Public Class Methods

new(settings = {}) click to toggle source
    # File lib/rack/handler/scgi.rb, line 26
26:       def initialize(settings = {})
27:         @app = settings[:app]
28:         super(settings)
29:       end
run(app, options=nil) click to toggle source
    # File lib/rack/handler/scgi.rb, line 11
11:       def self.run(app, options=nil)
12:         options[:Socket] = UNIXServer.new(options[:File]) if options[:File]
13:         new(options.merge(:app=>app,
14:                           :host=>options[:Host],
15:                           :port=>options[:Port],
16:                           :socket=>options[:Socket])).listen
17:       end
valid_options() click to toggle source
    # File lib/rack/handler/scgi.rb, line 19
19:       def self.valid_options
20:         {
21:           "Host=HOST" => "Hostname to listen on (default: localhost)",
22:           "Port=PORT" => "Port to listen on (default: 8080)",
23:         }
24:       end

Public Instance Methods

process_request(request, input_body, socket) click to toggle source
    # File lib/rack/handler/scgi.rb, line 31
31:       def process_request(request, input_body, socket)
32:         env = {}.replace(request)
33:         env.delete "HTTP_CONTENT_TYPE"
34:         env.delete "HTTP_CONTENT_LENGTH"
35:         env["REQUEST_PATH"], env["QUERY_STRING"] = env["REQUEST_URI"].split('?', 2)
36:         env["HTTP_VERSION"] ||= env["SERVER_PROTOCOL"]
37:         env["PATH_INFO"] = env["REQUEST_PATH"]
38:         env["QUERY_STRING"] ||= ""
39:         env["SCRIPT_NAME"] = ""
40: 
41:         rack_input = StringIO.new(input_body)
42:         rack_input.set_encoding(Encoding::BINARY) if rack_input.respond_to?(:set_encoding)
43: 
44:         env.update({"rack.version" => Rack::VERSION,
45:                      "rack.input" => rack_input,
46:                      "rack.errors" => $stderr,
47:                      "rack.multithread" => true,
48:                      "rack.multiprocess" => true,
49:                      "rack.run_once" => false,
50: 
51:                      "rack.url_scheme" => ["yes", "on", "1"].include?(env["HTTPS"]) ? "https" : "http"
52:                    })
53:         status, headers, body = app.call(env)
54:         begin
55:           socket.write("Status: #{status}\r\n")
56:           headers.each do |k, vs|
57:             vs.split("\n").each { |v| socket.write("#{k}: #{v}\r\n")}
58:           end
59:           socket.write("\r\n")
60:           body.each {|s| socket.write(s)}
61:         ensure
62:           body.close if body.respond_to? :close
63:         end
64:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.