Class: Merb::Rack::Handler::Mongrel
- Defined in:
- lib/merb-core/rack/handler/mongrel.rb
Class Method Summary collapse
-
.run(app, options = {}) {|server| ... } ⇒ Object
Runs the server and yields it to a block.
Instance Method Summary collapse
-
#initialize(app) ⇒ Mongrel
constructor
Parameters appMerb::Rack::Application:: The app that Mongrel should handle.
-
#process(request, response) ⇒ Object
Parameters requestMerb::Request:: The HTTP request to handle.
Constructor Details
#initialize(app) ⇒ Mongrel
Parameters
appMerb::Rack::Application:: The app that Mongrel should handle.
44 45 46 |
# File 'lib/merb-core/rack/handler/mongrel.rb', line 44 def initialize(app) @app = app end |
Class Method Details
.run(app, options = {}) {|server| ... } ⇒ Object
Runs the server and yields it to a block.
Parameters
appMerb::Rack::Application:: The app that Mongrel should handle.
- options
Options to pass to Mongrel (see below).
Block parameters
serverMongrel::HttpServer:: The server to run.
Options (options)
:Host
The hostname on which the app should run. Defaults to "0.0.0.0"
:Port
34 35 36 37 38 39 40 |
# File 'lib/merb-core/rack/handler/mongrel.rb', line 34 def self.run(app, ={}) server = ::Mongrel::HttpServer.new([:Host] || '0.0.0.0', [:Port] || 8080) server.register('/', ::Merb::Rack::Handler::Mongrel.new(app)) yield server if block_given? server.run.join end |
Instance Method Details
#process(request, response) ⇒ Object
Parameters
requestMerb::Request:: The HTTP request to handle.
- response
The response object to write response to.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/merb-core/rack/handler/mongrel.rb', line 51 def process(request, response) env = {}.replace(request.params) env.delete "HTTP_CONTENT_TYPE" env.delete "HTTP_CONTENT_LENGTH" env["SCRIPT_NAME"] = "" if env["SCRIPT_NAME"] == "/" 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", "rack.streaming" => true }) env["QUERY_STRING"] ||= "" env.delete "PATH_INFO" if env["PATH_INFO"] == "" status, headers, body = @app.call(env) begin response.status = status.to_i headers.each { |k, vs| vs.each { |v| response.header[k] = v } } if Proc === body body.call(response) else body.each { |part| response.body << part } end response.finished ensure body.close if body.respond_to? :close end end |