class Merb::Rack::Handler::Mongrel
Public Class Methods
new(app)
click to toggle source
run(app, options={}) { |server| ... }
click to toggle source
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
# File lib/merb-core/rack/handler/mongrel.rb, line 36 def self.run(app, options={}) @server = ::Mongrel::HttpServer.new(options[:Host] || '0.0.0.0', options[:Port] || 8080) @server.register('/', ::Merb::Rack::Handler::Mongrel.new(app)) yield @server if block_given? @server.run.join end
stop(block = true)
click to toggle source
:api: private
# File lib/merb-core/rack/handler/mongrel.rb, line 45 def self.stop(block = true) @server.stop end
Public Instance Methods
process(request, response)
click to toggle source
Parameters¶ ↑
- request<Merb::Request>
-
The HTTP request to handle.
- response<HTTPResponse>
-
The response object to write response to.
:api: plugin
# File lib/merb-core/rack/handler/mongrel.rb, line 62 def process(request, response) env = {}.replace(request.params) env.delete Merb::Const::HTTP_CONTENT_TYPE env.delete Merb::Const::HTTP_CONTENT_LENGTH env[Merb::Const::SCRIPT_NAME] = Merb::Const::EMPTY_STRING if env[Merb::Const::SCRIPT_NAME] == Merb::Const::SLASH env.update({"rack.version" => [0,1], "rack.input" => request.body || StringIO.new(""), "rack.errors" => STDERR, "rack.multithread" => true, "rack.multiprocess" => false, # ??? "rack.run_once" => false, "rack.url_scheme" => "http" }) env[Merb::Const::QUERY_STRING] ||= "" env.delete Merb::Const::PATH_INFO if env[Merb::Const::PATH_INFO] == Merb::Const::EMPTY_STRING status, headers, body = @app.call(env) begin response.status = status.to_i response.send_status(nil) headers.each { |k, vs| vs.split(Merb::Const::NEWLINE).each { |v| response.header[k] = v } } response.send_header body.each { |part| response.write(part) response.socket.flush } response.done = true ensure body.close if body.respond_to? :close end end