% rainbows(1) Rainbows! User Manual
% Rainbows! Hackers <rainbows-public@bogomips.org>
% December 3, 2009

# NAME

rainbows - rackup-like command to launch Rainbows!

# SYNOPSIS

rainbows [-c CONFIG_FILE] [-E RACK_ENV] [-D] [RACKUP_FILE]

# DESCRIPTION

A rackup(1)-like command to launch Rack applications using Rainbows!.
It is expected to be started in your application root (APP_ROOT),
but the "working_directory" directive may be used in the CONFIG_FILE.

While Rainbows! takes a myriad of command-line options for
compatibility with ruby(1) and rackup(1), it is recommended to stick
to the few command-line options specified in the SYNOPSIS and use
the CONFIG_FILE as much as possible.

# RACKUP FILE

This defaults to \"config.ru\" in APP_ROOT.  It should be the same
file used by rackup(1) and other Rack launchers, it uses the
*Rack::Builder* DSL.

Embedded command-line options are mostly parsed for compatibility
with rackup(1) but strongly discouraged.

# UNICORN OPTIONS
-c, \--config-file CONFIG_FILE
:   Path to the Unicorn-specific config file.  The config file is
    implemented as a Ruby DSL, so Ruby code may executed.
    See the RDoc/ri for the *Unicorn::Configurator* class for the full
    list of directives available from the DSL.

-D, \--daemonize
:   Run daemonized in the background.  The process is detached from
    the controlling terminal and stdin is redirected to "/dev/null".
    Unlike many common UNIX daemons, we do not chdir to \"/\"
    upon daemonization to allow more control over the startup/upgrade
    process.
    Unless specified in the CONFIG_FILE, stderr and stdout will
    also be redirected to "/dev/null".

-E, \--env RACK_ENV
:   Run under the given RACK_ENV.  See the RACK ENVIRONMENT section
    for more details.

-l, \--listen ADDRESS
:   Listens on a given ADDRESS.  ADDRESS may be in the form of
    HOST:PORT or PATH, HOST:PORT is taken to mean a TCP socket
    and PATH is meant to be a path to a UNIX domain socket.
    Defaults to "0.0.0.0:8080" (all addresses on TCP port 8080)
    For production deployments, specifying the "listen" directive in
    CONFIG_FILE is recommended as it allows fine-tuning of socket
    options.
-N, \--no-default-middleware
:   Disables loading middleware implied by RACK_ENV.  This bypasses the
    configuration documented in the RACK ENVIRONMENT section, but still
    allows RACK_ENV to be used for application/framework-specific purposes.

# RACKUP COMPATIBILITY OPTIONS
-o, \--host HOST
:   Listen on a TCP socket belonging to HOST, default is
    "0.0.0.0" (all addresses).
    If specified multiple times on the command-line, only the
    last-specified value takes effect.
    This option only exists for compatibility with the rackup(1) command,
    use of "-l"/"\--listen" switch is recommended instead.

-p, \--port PORT
:   Listen on the specified TCP PORT, default is 8080.
    If specified multiple times on the command-line, only the last-specified
    value takes effect.
    This option only exists for compatibility with the rackup(1) command,
    use of "-l"/"\--listen" switch is recommended instead.

-s, \--server SERVER
:   No-op, this exists only for compatibility with rackup(1).

# RUBY OPTIONS
-e, \--eval LINE
:   Evaluate a LINE of Ruby code.  This evaluation happens
    immediately as the command-line is being parsed.

-d, \--debug
:   Turn on debug mode, the $DEBUG variable is set to true.

-w, \--warn
:   Turn on verbose warnings, the $VERBOSE variable is set to true.

-I, \--include PATH
:   specify $LOAD_PATH.  PATH will be prepended to $LOAD_PATH.
    The \':\' character may be used to delimit multiple directories.
    This directive may be used more than once.  Modifications to
    $LOAD_PATH take place immediately and in the order they were
    specified on the command-line.

-r, \--require LIBRARY
:   require a specified LIBRARY before executing the application.  The
    \"require\" statement will be executed immediately and in the order
    they were specified on the command-line.

# SIGNALS

The following UNIX signals may be sent to the master process:

* HUP - reload config file, app, and gracefully restart all workers
* INT/TERM - quick shutdown, kills all workers immediately
* QUIT - graceful shutdown, waits for workers to finish their
  current request before finishing.
* USR1 - reopen all logs owned by the master and all workers
  See Unicorn::Util.reopen_logs for what is considered a log.
* USR2 - reexecute the running binary.  A separate QUIT
  should be sent to the original process once the child is verified to
  be up and running.
* WINCH - gracefully stops workers but keep the master running.
  This will only work for daemonized processes.
* TTIN - increment the number of worker processes by one
* TTOU - decrement the number of worker processes by one

See the [SIGNALS][4] document for full description of all signals
used by Rainbows!.

#  RACK ENVIRONMENT

Accepted values of RACK_ENV and the middleware they automatically load
(outside of RACKUP_FILE) are exactly as those in rackup(1):

* development - loads Rack::CommonLogger, Rack::ShowExceptions, and
                Rack::Lint middleware
* deployment  - loads Rack::CommonLogger middleware
* none        - loads no middleware at all, relying
                entirely on RACKUP_FILE

All unrecognized values for RACK_ENV are assumed to be
"none".  Production deployments are strongly encouraged to use
"deployment" or "none" for maximum performance.

Note the Rack::ContentLength and Rack::Chunked middlewares are also
loaded by "deployment" and "development", but no other values of
RACK_ENV.  If needed, they must be individually specified in the
RACKUP_FILE, some frameworks do not require them.

# SEE ALSO

* unicorn(1)
* *Rack::Builder* ri/RDoc
* *Unicorn::Configurator* ri/RDoc
* [Rainbows! RDoc][1]
* [Rack RDoc][2]
* [Rackup HowTo][3]

[1]: https://bogomips.org/rainbows/
[2]: http://rdoc.info/gems/r#/gems/rack/frames
[3]: http://wiki.github.com/rack/rack/tutorial-rackup-howto
[4]: https://bogomips.org/rainbows/SIGNALS.html
