lib/rack/server.rb in rack-1.1.6 vs lib/rack/server.rb in rack-1.2.0
- old
+ new
@@ -55,11 +55,11 @@
opts.on("-D", "--daemonize", "run daemonized in the background") { |d|
options[:daemonize] = d ? true : false
}
opts.on("-P", "--pid FILE", "file to store PID (default: rack.pid)") { |f|
- options[:pid] = ::File.expand_path(f, Dir.pwd)
+ options[:pid] = f
}
opts.separator ""
opts.separator "Common options:"
@@ -77,16 +77,65 @@
options[:config] = args.last if args.last
options
end
end
- def self.start
- new.start
+ # Start a new rack server (like running rackup). This will parse ARGV and
+ # provide standard ARGV rackup options, defaulting to load 'config.ru'.
+ #
+ # Providing an options 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
+ def self.start(options = nil)
+ new(options).start
end
- attr_accessor :options
+ attr_writer :options
+ # Options 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:
+ # - development: CommonLogger, ShowExceptions, and Lint
+ # - deployment: CommonLogger
+ # - none: no extra middleware
+ # note: when the server is a cgi server, CommonLogger is not included.
+ # * :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
def initialize(options = nil)
@options = options
end
def options
@@ -98,11 +147,11 @@
:environment => "development",
:pid => nil,
:Port => 9292,
:Host => "0.0.0.0",
:AccessLog => [],
- :config => ::File.expand_path("config.ru", Dir.pwd)
+ :config => "config.ru"
}
end
def app
@app ||= begin
@@ -117,11 +166,11 @@
end
def self.middleware
@middleware ||= begin
m = Hash.new {|h,k| h[k] = []}
- m["deployment"].concat [lambda {|server| server.server =~ /CGI/ ? nil : [Rack::CommonLogger, $stderr] }]
+ m["deployment"].concat [lambda {|server| server.server.name =~ /CGI/ ? nil : [Rack::CommonLogger, $stderr] }]
m["development"].concat m["deployment"] + [[Rack::ShowExceptions], [Rack::Lint]]
m
end
end
@@ -141,24 +190,33 @@
if options[:warn]
$-w = true
end
if includes = options[:include]
- $LOAD_PATH.unshift *includes
+ $LOAD_PATH.unshift(*includes)
end
if library = options[:require]
require library
end
daemonize_app if options[:daemonize]
write_pid if options[:pid]
+
+ trap(:INT) do
+ if server.respond_to?(:shutdown)
+ server.shutdown
+ else
+ exit
+ end
+ end
+
server.run wrapped_app, options
end
def server
- @_server ||= Rack::Handler.get(options[:server]) || Rack::Handler.default
+ @_server ||= Rack::Handler.get(options[:server]) || Rack::Handler.default(options)
end
private
def parse_options(args)
options = default_options
@@ -166,9 +224,10 @@
# Don't evaluate CGI ISINDEX parameters.
# http://hoohoo.ncsa.uiuc.edu/cgi/cl.html
args.clear if ENV.include?("REQUEST_METHOD")
options.merge! opt_parser.parse! args
+ ENV["RACK_ENV"] = options[:environment]
options
end
def opt_parser
Options.new