Sha256: ecdce776a3818916da07ba3db797b3553547659d1c69832725927f9541d73f11

Contents?: true

Size: 1.15 KB

Versions: 4

Compression:

Stored size: 1.15 KB

Contents

$LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))

require 'mongrel2'

module Rack
  module Handler
    class Mongrel2
      class << self
        def run(app, options = {})
          options = {
            :recv => ENV['RACK_MONGREL2_RECV'] || 'tcp://127.0.0.1:9997',
            :send => ENV['RACK_MONGREL2_SEND'] || 'tcp://127.0.0.1:9996',
            :uuid => ENV['RACK_MONGREL2_UUID'],
            :chroot => ENV['RACK_MONGREL2_CHROOT'] || '.'
          }.merge(options)

          raise ArgumentError.new('Must specify an :uuid or set RACK_MONGREL2_UUID') if options[:uuid].nil?

          conn = nil

          EM.run do
            conn = ::Mongrel2::Connection.new(options[:uuid], options[:recv], options[:send], options[:chroot], app)
            
            # This doesn't work at all until zmq fixes their shit (in 2.1.x I think), but trap it now anyway.
            %w(INT TERM KILL).each do |sig|
              trap(sig) do
                conn.close
                EM.stop
              end
            end
          end
        ensure
          conn.close if conn.respond_to?(:close)
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
em-rack-mongrel2-0.2.3 lib/rack/handler/mongrel2.rb
em-rack-mongrel2-0.2.2 lib/rack/handler/mongrel2.rb
em-rack-mongrel2-0.2.1 lib/rack/handler/mongrel2.rb
em-rack-mongrel2-0.2.0 lib/rack/handler/mongrel2.rb