Class: Merb::Rack::Handler::Mongrel
- Inherits:
-
Mongrel::HttpHandler
- Object
- Mongrel::HttpHandler
- Merb::Rack::Handler::Mongrel
- Defined in:
- merb-core/lib/merb-core/rack/handler/mongrel.rb
Class Method Summary (collapse)
-
+ (Object) run(app, options = {}) {|server| ... }
Runs the server and yields it to a block.
- + (Object) stop(block = true) private
Instance Method Summary (collapse)
-
- (Mongrel) initialize(app)
constructor
A new instance of Mongrel.
- - (Object) process(request, response)
Constructor Details
- (Mongrel) initialize(app)
A new instance of Mongrel
48 49 50 |
# File 'merb-core/lib/merb-core/rack/handler/mongrel.rb', line 48 def initialize(app) @app = app end |
Class Method Details
+ (Object) run(app, options = {}) {|server| ... }
Runs the server and yields it to a block.
32 33 34 35 36 37 38 |
# File 'merb-core/lib/merb-core/rack/handler/mongrel.rb', line 32 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 |
+ (Object) stop(block = true)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
41 42 43 |
# File 'merb-core/lib/merb-core/rack/handler/mongrel.rb', line 41 def self.stop(block = true) @server.stop end |
Instance Method Details
- (Object) process(request, response)
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 94 95 96 97 98 |
# File 'merb-core/lib/merb-core/rack/handler/mongrel.rb', line 57 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 |