rackup How-To
By Sam Roberts
Config File Syntax
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!
With a .ru config file
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.)
With a .rb, etc config file
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/configconfig.rb/usr/bin/configexample/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
Auto-Selection of a Server
The specified server (from Handler.get) is used, or the first of these
to match is selected:
PHP_FCGI_CHILDRENis in the process environment, use FastCGI- Rack::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
Automatic Middleware
rackup will automatically use some middleware, depending on the
environment you select, the -E switch, with development being the
default:
development: CommonLogger, ShowExceptions, Lintdeployment: CommonLoggernone: none
CommonLogger isn’t used with the CGI server, because it writes to
stderr, which doesn’t interact so well with CGI.