Sha256: f93704ad68781b4a2cc998b55e6f56d65ce81036183b538961fc325215525c74

Contents?: true

Size: 1.3 KB

Versions: 47

Compression:

Stored size: 1.3 KB

Contents

module Rack # :nodoc:
  
  # Simple Rack Middleware to kill Unicorns after X requests.
  #
  # Use as follows in e.g. your rackup File:
  #
  #   Rack::Harakiri.after = 100
  #   use Rack::Harakiri
  #
  # Then the Unicorn will commit suicide after 100 requests (50 is the default).
  #
  # The Master Unicorn process forks a new child Unicorn to replace the old one.
  #
  class Harakiri
    
    # Set the amount of requests before the Unicorn commits Harakiri.
    #
    cattr_accessor :after
    
    def initialize app
      @app = app
      
      @requests            = 0
      @quit_after_requests = self.class.after || 50
    end
    
    # #call interface method.
    #
    # Harakiri is a middleware, so it delegates the the app or
    # the next middleware after checking if it is time to honorably retire.
    #
    def call env
      harakiri
      @app.call env
    end
    
    # Checks to see if it is time to honorably retire.
    #
    # If yes, kills itself (Unicorn will answer the request, honorably).
    #
    # Note: Sends its process a QUIT signal if it is time.
    #
    def harakiri
      @requests = @requests + 1
      Process.kill(:QUIT, Process.pid) if harakiri?
    end
    
    # Is it time to honorably retire?
    #
    def harakiri?
      @requests >= @quit_after_requests
    end
    
  end
end

Version data entries

47 entries across 47 versions & 1 rubygems

Version Path
picky-2.7.0 lib/picky/rack/harakiri.rb
picky-2.6.0 lib/picky/rack/harakiri.rb
picky-2.5.2 lib/picky/rack/harakiri.rb
picky-2.5.1 lib/picky/rack/harakiri.rb
picky-2.5.0 lib/picky/rack/harakiri.rb
picky-2.4.3 lib/picky/rack/harakiri.rb
picky-2.4.2 lib/picky/rack/harakiri.rb
picky-2.4.1 lib/picky/rack/harakiri.rb
picky-2.4.0 lib/picky/rack/harakiri.rb
picky-2.3.0 lib/picky/rack/harakiri.rb
picky-2.2.1 lib/picky/rack/harakiri.rb
picky-2.2.0 lib/picky/rack/harakiri.rb
picky-2.1.2 lib/picky/rack/harakiri.rb
picky-2.1.1 lib/picky/rack/harakiri.rb
picky-2.1.0 lib/picky/rack/harakiri.rb
picky-2.0.0 lib/picky/rack/harakiri.rb
picky-2.0.0.pre3 lib/picky/rack/harakiri.rb
picky-2.0.0.pre2 lib/picky/rack/harakiri.rb
picky-2.0.0.pre1 lib/picky/rack/harakiri.rb
picky-1.5.4 lib/picky/rack/harakiri.rb