De hecho este es todo el código del ejecutable rackup
#!/usr/bin/env ruby require "rack" Rack::Server.start
El método start
starts a new rack server (like running rackup). This will parse ARGV and
provide standard ARGV rackup options, defaulting to load config.ru.
Providing an option hash will prevent ARGV parsing and will not include
any default options.
This method can be used to very easily launch a CGI application, for example:
Rack::Server.start(
:app => lambda do |e|
[200, {'Content-Type' => 'text/html'}, ['hello world']]
end,
:server => 'cgi'
)
Further options available here are documented on Rack::Server#initialize
(véase el código en
Rack::Server
):
def self.start(options = nil)
new(options).start
end
como se ve, el código de Rack::Server está en Github.
The Options of start and new may include:
:app
a rack application to run (overrides :config)
:config
a rackup configuration file path to load (.ru)
:environment
this selects the middleware that will be wrapped around
your application. Default options available are:
:server
choose a specific Rack::Handler, e.g. cgi, fcgi, webrick
:daemonize
if true, the server will daemonize itself (fork, detach, etc)
:pid
path to write a pid file after daemonize
:Host
the host address to bind to (used by supporting Rack::Handler)
:Port
the port to bind to (used by supporting Rack::Handler)
:AccessLog
webrick acess log options (or supporting Rack::Handler)
:debug
turn on debug output ($DEBUG = true)
:warn
turn on warnings ($-w = true)
:include
add given paths to $LOAD_PATH
:require
require the given libraries
Si no se especifica, rackup busca un fichero con nombre config.ru.
[~/local/src/ruby/sinatra/rack/rackup/simple(master)]$ cat config.ru require './myapp' run MyApp.new
Esta es la aplicación:
[~/local/src/ruby/sinatra/rack/rackup/simple(master)]$ cat myapp.rb
class MyApp
def call env
[200, {"Content-Type" => "text/html"}, ["Hello Rack Participants"]]
end
end
[~/local/src/ruby/sinatra/rack/rackup/simple(master)]$ cat Rakefile task :default => :server desc "run server" task :server do sh "rackup" end desc "run client via curl" task :client do sh "curl -v localhost:9292" end
[~/local/src/ruby/sinatra/rack/rackup/simple(master)]$ rackup >> Thin web server (v1.5.1 codename Straight Razor) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:9292, CTRL+C to stop
[~/local/src/ruby/sinatra/rack/rackup/simple(master)]$ curl -v localhost:9292 * About to connect() to localhost port 9292 (#0) * Trying ::1... Connection refused * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9292 (#0) > GET / HTTP/1.1 > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8y zlib/1.2.5 > Host: localhost:9292 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: text/html < Transfer-Encoding: chunked < Connection: close < Server: thin 1.5.1 codename Straight Razor < * Closing connection #0 Hello Rack Participants
[~]$ rackup --help
Usage: rackup [ruby options] [rack options] [rackup config]
Ruby options:
-e, --eval LINE evaluate a LINE of code
-d, --debug set debugging flags (set $DEBUG to true)
-w, --warn turn warnings on for your script
-I, --include PATH specify $LOAD_PATH (may be used more than once)
-r, --require LIBRARY require the library, before executing your script
Rack options:
-s, --server SERVER serve using SERVER (webrick/mongrel)
-o, --host HOST listen on HOST (default: 0.0.0.0)
-p, --port PORT use PORT (default: 9292)
-O NAME[=VALUE], pass VALUE to the server as option NAME.
If no VALUE, sets it to true.
Run
'rackup -s SERVER -h'
to get a list of options for SERVER
--option
-E, --env ENVIRONMENT use ENVIRONMENT for defaults (default: development)
-D, --daemonize run daemonized in the background
-P, --pid FILE file to store PID (default: rack.pid)
Common options:
-h, -?, --help Show this message
--version Show version
config.ru empieza por \# es tratada
como una línea de opciones permitiendo así que los argumentos de rackup
se especifiquen en el fichero de configuración:
#\-w -p 8765
use Rack::Reloader, 0
use Rack::ContentLength
app = proc do |env|
[200, {'content-Type' => 'text/plain' }, ['a']]
end
run app