rainbows.git  about / heads / tags
Unicorn for sleepy apps and slow clients
blob 7add1f80f716eb1134bb86440fc84e715657a2fa 1862 bytes (raw)
$ git show v0.97.0:lib/rainbows/configurator.rb	# shows this blob on the CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
# -*- encoding: binary -*-
module Rainbows

  # This module adds \Rainbows! to the
  # {Unicorn::Configurator}[http://unicorn.bogomips.org/Unicorn/Configurator.html]
  module Configurator

    # configures \Rainbows! with a given concurrency model to +use+ and
    # a +worker_connections+ upper-bound.  This method may be called
    # inside a Unicorn/\Rainbows! configuration file:
    #
    #   Rainbows! do
    #     use :ThreadSpawn # concurrency model to use
    #     worker_connections 400
    #     keepalive_timeout 0 # zero disables keepalives entirely
    #     client_max_body_size 5*1024*1024 # 5 megabytes
    #   end
    #
    #   # the rest of the Unicorn configuration
    #   worker_processes 8
    #
    # See the documentation for the respective Revactor, ThreadSpawn,
    # and ThreadPool classes for descriptions and recommendations for
    # each of them.  The total number of clients we're able to serve is
    # +worker_processes+ * +worker_connections+, so in the above example
    # we can serve 8 * 400 = 3200 clients concurrently.
    #
    # The default is +keepalive_timeout+ is 5 seconds, which should be
    # enough under most conditions for browsers to render the page and
    # start retrieving extra elements for.  Increasing this beyond 5
    # seconds is not recommended.  Zero disables keepalive entirely
    # (but pipelining fully-formed requests is still works).
    #
    # The default +client_max_body_size+ is 1 megabyte (1024 * 1024 bytes),
    # setting this to +nil+ will disable body size checks and allow any
    # size to be specified.
    def Rainbows!(&block)
      block_given? or raise ArgumentError, "Rainbows! requires a block"
      HttpServer.setup(block)
    end

  end
end

# inject the Rainbows! method into Unicorn::Configurator
Unicorn::Configurator.class_eval { include Rainbows::Configurator }

git clone https://yhbt.net/rainbows.git