Rainbows! 3.3.0 - Rack server for sleepy apps and slow clients

Rainbows! is an HTTP server for sleepy Rack applications. It is based
Unicorn, but designed to handle applications that expect long
request/response times and/or slow clients.

For Rack applications not heavily bound by slow external network
dependencies, consider Unicorn instead as it simpler and easier to


  • improved documentation all around, suggestions/comments to further
    improve documentation is greatly welcome at:
    [email protected]

  • added GPLv3 option to the license (now (Ruby|GPLv2|GPLv3), though
    Unicorn is still (Ruby|GPLv2) for now)

  • added client_header_buffer_size config directive (default 1K)

  • small default header buffer size (16K => 1K) to reduce memory usage,
    Rails apps with cookie sessions may want to increase this (~2K)

  • all concurrency models default to 50 connections per process

  • all concurrency models with a secondary :pool_size parameter also
    default to 50 (threads/fibers/whatever)

  • RLIMIT_NOFILE and RLIMIT_NPROC are automatically increased if needed

  • Rainbows::ThreadTimeout middleware rewritten, still not recommended,
    lazy people should be using Unicorn anyways :slight_smile:

  • Several experimental Linux-only edge-triggered epoll options:
    XEpollThreadSpawn, XEpollThreadPool, XEpoll, and Epoll.
    The latter two were in previous releases but never announced.
    These require the “sleepy_penguin”, “raindrops”, and “sendfile”

=== Deprecations

  • Rainbows::Fiber::IO* APIs all deprecated, Rainbows! will avoid
    having any concurrency model-specific APIs in the future and
    also avoid introducing new APIs for applications.

  • Fiber-based concurrency models are no longer recommended, they’re
    too fragile for most apps, use at your own risk (they’ll continue to
    be supported, however). Linux NPTL + Ruby 1.9 is pretty lightweight
    and will be even lighter in Ruby 1.9.3 if you’re careful with stack
    usage in your C extensions.


Zbatery is an HTTP server for Rack applications on systems that either
do not support fork(), or have no memory (nor need) to run the
master/worker model. It is based on Rainbows! (which is based on
Unicorn (which is based on Mongrel)) and inherits parts of each.
Zbatery supports your choice of all the thread/fiber/event/actor-based
concurrency models and Rack middleware that Rainbows! supports (or will
ever support) in a single process.


Like Rainbows! 3.3.0, we’ve added the GPLv3 to our license
(in addition to GPLv2 and Ruby terms). See Rainbows! 3.3.0
release notes and news for more infor on changes:



SIGQUIT (graceful shutdown) now drops idle keepalive clients for
the concurrency models where maintaining an idle client is
relatively inexpensive: Coolio, CoolioThreadPool,
CoolioThreadSpawn, Epoll, EventMachine, XEpoll,
XEpollThreadPool, XEpollThreadSpawn.

Kgio.autopush now works properly for all multi-threaded
concurrency models (if you’re using :tcp_nopush).

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs