Sha256: e45d02edeeb907e0aeada1f47678b6f11be5a0e5c95c649d748db2c76cbe5798

Contents?: true

Size: 1.38 KB

Versions: 22

Compression:

Stored size: 1.38 KB

Contents

module Picky

  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

end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
picky-3.2.0 lib/picky/rack/harakiri.rb
picky-3.1.13 lib/picky/rack/harakiri.rb
picky-3.1.12 lib/picky/rack/harakiri.rb
picky-3.1.11 lib/picky/rack/harakiri.rb
picky-3.1.10 lib/picky/rack/harakiri.rb
picky-3.1.9 lib/picky/rack/harakiri.rb
picky-3.1.8 lib/picky/rack/harakiri.rb
picky-3.1.7 lib/picky/rack/harakiri.rb
picky-3.1.6 lib/picky/rack/harakiri.rb
picky-3.1.5 lib/picky/rack/harakiri.rb
picky-3.1.4 lib/picky/rack/harakiri.rb
picky-3.1.3 lib/picky/rack/harakiri.rb
picky-3.1.2 lib/picky/rack/harakiri.rb
picky-3.1.1 lib/picky/rack/harakiri.rb
picky-3.1.0 lib/picky/rack/harakiri.rb
picky-3.0.1 lib/picky/rack/harakiri.rb
picky-3.0.0 lib/picky/rack/harakiri.rb
picky-3.0.0.pre5 lib/picky/rack/harakiri.rb
picky-3.0.0.pre4 lib/picky/rack/harakiri.rb
picky-3.0.0.pre3 lib/picky/rack/harakiri.rb