-
Notifications
You must be signed in to change notification settings - Fork 1.6k
(tutorial) rackup howto
By Sam Roberts
The config file is config.ru
if none is specified.
Handling of config files depends on whether it’s .ru
, or something
else. It’s important to define the application that rackup
will run
correctly; failure to do so will result in mysterious runtime errors!
The config file is treated as if it is the body of
app = Rack::Builder.new { … config_file_content_here … }.to_app
Also, the first line starting with #\
is treated as if it were
command-line options, allowing rackup
arguments to be specified in the
config file. For example:
#\ -w -p 8765
use Rack::Reloader, 0
use Rack::ContentLength
app = proc do |env|
[200, {'Content-Type' => 'text/plain'}, ['a']]
end
run app
Would run with Ruby warnings enabled, and request port 8765.
(Detail: the -p
option will be ignored unless the server supports the
:Port
option.)
The config file is required. It must assign the app to a global constant
so rackup
can find it.
The name of the constant should be config file’s base name, stripped of
a trailing .rb
(if present), and capitalized. The following config
files all look for Config
:
~/bin/config
config.rb
/usr/bin/config
example/config.rb
This will work if the file name is octet.rb
:
Octet = Rack::Builder.new do
use Rack::Reloader, 0
use Rack::ContentLength
app = proc do |env|
[ 200, { 'Content-Type' => 'text/plain' }, ['b']]
end
run app
end.to_app
The specified server (from Handler.get
) is used, or the first of these
to match is selected:
-
PHP_FCGI_CHILDREN
is in the process environment, use FastCGI -
REQUEST_METHOD
is in the process environment, use CGI - If Puma is installed, use that
- If Thin is installed, use that
- If falcon is installed, use that
- Otherwise, use WEBRick
rackup
will automatically use some middleware, depending on the
environment you select, the -E
switch, with development
being the
default:
-
development
: CommonLogger, ShowExceptions, Lint -
deployment
: CommonLogger -
none
: none
CommonLogger isn’t used with the CGI server, because it writes to
stderr
, which doesn’t interact so well with CGI.