bin/rackup in rack-0.3.0 vs bin/rackup in rack-0.4.0
- old
+ new
@@ -4,10 +4,12 @@
require 'optparse'
automatic = false
server = nil
env = "development"
+daemonize = false
+pid = nil
options = {:Port => 9292, :Host => "0.0.0.0", :AccessLog => []}
opts = OptionParser.new("", 24, ' ') { |opts|
opts.banner = "Usage: rackup [ruby options] [rack options] [rackup config]"
@@ -53,10 +55,18 @@
opts.on("-E", "--env ENVIRONMENT", "use ENVIRONMENT for defaults (default: development)") { |e|
env = e
}
+ opts.on("-D", "--daemonize", "run daemonized in the background") { |d|
+ daemonize = d ? true : false
+ }
+
+ opts.on("-P", "--pid FILE", "file to store PID (default: rack.pid)") { |f|
+ pid = File.expand_path(f)
+ }
+
opts.separator ""
opts.separator "Common options:"
opts.on_tail("-h", "--help", "Show this message") do
puts opts
@@ -91,12 +101,11 @@
require 'rack'
require config
inner_app = Object.const_get(File.basename(config, '.rb').capitalize)
end
-case server
-when nil
+unless server = Rack::Handler.get(server)
# Guess.
if ENV.include?("PHP_FCGI_CHILDREN")
server = Rack::Handler::FastCGI
# We already speak FastCGI
@@ -109,30 +118,19 @@
server = Rack::Handler::Mongrel
rescue LoadError => e
server = Rack::Handler::WEBrick
end
end
-when "mongrel"
- server = Rack::Handler::Mongrel
-when "webrick"
- server = Rack::Handler::WEBrick
-when "cgi"
- server = Rack::Handler::CGI
-when "fastcgi"
- server = Rack::Handler::FastCGI
-else
- server = Rack::Handler.const_get(server.capitalize)
end
p server if $DEBUG
case env
when "development"
app = Rack::Builder.new {
use Rack::CommonLogger, STDERR unless server.name =~ /CGI/
use Rack::ShowExceptions
- use Rack::Reloader
use Rack::Lint
run inner_app
}.to_app
when "deployment"
@@ -147,8 +145,28 @@
end
if $DEBUG
pp app
pp inner_app
+end
+
+if daemonize
+ if RUBY_VERSION < "1.9"
+ exit if fork
+ Process.setsid
+ exit if fork
+ Dir.chdir "/"
+ File.umask 0000
+ STDIN.reopen "/dev/null"
+ STDOUT.reopen "/dev/null", "a"
+ STDERR.reopen "/dev/null", "a"
+ else
+ Process.daemon
+ end
+
+ if pid
+ File.open(pid, 'w'){ |f| f.write("#{Process.pid}") }
+ at_exit { File.delete(pid) if File.exist?(pid) }
+ end
end
server.run app, options