Class Merb::Rack::Handler::Mongrel
In: merb-core/lib/merb-core/rack/handler/mongrel.rb
Parent: ::Mongrel::HttpHandler

Methods

new   process   run   stop  

Public Class methods

Parameters

app<Merb::Rack::Application>:The app that Mongrel should handle.

:api: plugin

[Source]

    # File merb-core/lib/merb-core/rack/handler/mongrel.rb, line 53
53:         def initialize(app)
54:           @app = app
55:         end

Runs the server and yields it to a block.

Parameters

app<Merb::Rack::Application>:The app that Mongrel should handle.
options<Hash>:Options to pass to Mongrel (see below).

Block parameters

server<Mongrel::HttpServer>:The server to run.

Options (options)

:Host<String>:The hostname on which the app should run. Defaults to "0.0.0.0"
:Port<Fixnum>:The port for the app. Defaults to 8080.

:api: plugin

[Source]

    # File merb-core/lib/merb-core/rack/handler/mongrel.rb, line 36
36:         def self.run(app, options={})
37:           @server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0',
38:                                              options[:Port] || 8080)
39:           @server.register('/', ::Merb::Rack::Handler::Mongrel.new(app))
40:           yield @server  if block_given?
41:           @server.run.join
42:         end

:api: private

[Source]

    # File merb-core/lib/merb-core/rack/handler/mongrel.rb, line 45
45:         def self.stop(block = true)
46:           @server.stop
47:         end

Public Instance methods

Parameters

request<Merb::Request>:The HTTP request to handle.
response<HTTPResponse>:The response object to write response to.

:api: plugin

[Source]

    # File merb-core/lib/merb-core/rack/handler/mongrel.rb, line 62
62:         def process(request, response)
63:           env = {}.replace(request.params)
64:           env.delete Merb::Const::HTTP_CONTENT_TYPE
65:           env.delete Merb::Const::HTTP_CONTENT_LENGTH
66:   
67:           env[Merb::Const::SCRIPT_NAME] = Merb::Const::EMPTY_STRING if env[Merb::Const::SCRIPT_NAME] == Merb::Const::SLASH
68:   
69:           env.update({"rack.version" => [0,1],
70:                        "rack.input" => request.body || StringIO.new(""),
71:                        "rack.errors" => STDERR,
72:   
73:                        "rack.multithread" => true,
74:                        "rack.multiprocess" => false, # ???
75:                        "rack.run_once" => false,
76:   
77:                        "rack.url_scheme" => "http"
78:                      })
79:           env[Merb::Const::QUERY_STRING] ||= ""
80:           env.delete Merb::Const::PATH_INFO  if env[Merb::Const::PATH_INFO] == Merb::Const::EMPTY_STRING
81:   
82:           status, headers, body = @app.call(env)
83:   
84:           begin
85:             response.status = status.to_i
86:             headers.each { |k, vs|
87:               vs.each { |v|
88:                 response.header[k] = v
89:               }
90:             }
91:             
92:             body.each { |part|
93:               response.body << part
94:             }
95:             response.finished
96:           ensure
97:             body.close  if body.respond_to? :close
98:           end
99:         end

[Validate]