-
Notifications
You must be signed in to change notification settings - Fork 21.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor script/server into an object that inherits from Rack::Server
- Loading branch information
Carlhuda
authored and
Carlhuda
committed
Nov 24, 2009
1 parent
58dec09
commit a080323
Showing
2 changed files
with
62 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,73 +1,75 @@ | ||
require 'action_dispatch' | ||
|
||
require 'fileutils' | ||
require 'optparse' | ||
require 'action_dispatch' | ||
|
||
options = { | ||
:Port => 3000, | ||
:Host => "0.0.0.0", | ||
:environment => (ENV['RAILS_ENV'] || "development").dup, | ||
:config => "#{Rails.root}/config.ru", | ||
:detach => false, | ||
:debugger => false | ||
} | ||
module Rails | ||
class Server < ::Rack::Server | ||
This comment has been minimized.
Sorry, something went wrong. |
||
class Options | ||
def parse!(args) | ||
options = {} | ||
args = args.dup | ||
opt_parser = OptionParser.new do |opts| | ||
opts.on("-p", "--port=port", Integer, | ||
"Runs Rails on the specified port.", "Default: #{options[:Port]}") { |v| options[:Port] = v } | ||
opts.on("-b", "--binding=ip", String, | ||
"Binds Rails to the specified ip.", "Default: #{options[:Host]}") { |v| options[:Host] = v } | ||
opts.on("-c", "--config=file", String, | ||
"Use custom rackup configuration file") { |v| options[:config] = v } | ||
opts.on("-d", "--daemon", "Make server run as a Daemon.") { options[:daemonize] = true } | ||
opts.on("-u", "--debugger", "Enable ruby-debugging for the server.") { options[:debugger] = true } | ||
opts.on("-e", "--environment=name", String, | ||
"Specifies the environment to run this server under (test/development/production).", | ||
"Default: #{options[:environment]}") { |v| options[:environment] = v } | ||
|
||
ARGV.clone.options do |opts| | ||
opts.on("-p", "--port=port", Integer, | ||
"Runs Rails on the specified port.", "Default: #{options[:Port]}") { |v| options[:Port] = v } | ||
opts.on("-b", "--binding=ip", String, | ||
"Binds Rails to the specified ip.", "Default: #{options[:Host]}") { |v| options[:Host] = v } | ||
opts.on("-c", "--config=file", String, | ||
"Use custom rackup configuration file") { |v| options[:config] = v } | ||
opts.on("-d", "--daemon", "Make server run as a Daemon.") { options[:detach] = true } | ||
opts.on("-u", "--debugger", "Enable ruby-debugging for the server.") { options[:debugger] = true } | ||
opts.on("-e", "--environment=name", String, | ||
"Specifies the environment to run this server under (test/development/production).", | ||
"Default: #{options[:environment]}") { |v| options[:environment] = v } | ||
opts.separator "" | ||
|
||
opts.separator "" | ||
opts.on("-h", "--help", "Show this help message.") { puts opts; exit } | ||
end | ||
|
||
opts.on("-h", "--help", "Show this help message.") { puts opts; exit } | ||
opt_parser.parse! args | ||
|
||
opts.parse! | ||
end | ||
options[:server] = args.shift | ||
options | ||
end | ||
end | ||
|
||
server = Rack::Handler.get(ARGV.first) rescue nil | ||
unless server | ||
begin | ||
server = Rack::Handler::Mongrel | ||
rescue LoadError => e | ||
server = Rack::Handler::WEBrick | ||
end | ||
end | ||
def opt_parser | ||
Options.new | ||
end | ||
|
||
puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}" | ||
puts "=> Rails #{Rails.version} application starting on http://#{options[:Host]}:#{options[:Port]}" | ||
def start | ||
puts "=> Booting #{ActiveSupport::Inflector.demodulize(server)}" | ||
puts "=> Rails #{Rails.version} application starting on http://#{options[:Host]}:#{options[:Port]}" | ||
puts "=> Call with -d to detach" unless options[:daemonize] | ||
trap(:INT) { exit } | ||
puts "=> Ctrl-C to shutdown server" unless options[:daemonize] | ||
|
||
if options[:detach] | ||
Process.daemon | ||
pid = "#{Rails.root}/tmp/pids/server.pid" | ||
File.open(pid, 'w'){ |f| f.write(Process.pid) } | ||
at_exit { File.delete(pid) if File.exist?(pid) } | ||
end | ||
|
||
ENV["RAILS_ENV"] = options[:environment] | ||
RAILS_ENV.replace(options[:environment]) if defined?(RAILS_ENV) | ||
|
||
app = Rack::Builder.new { | ||
use Rails::Rack::LogTailer unless options[:detach] | ||
use Rails::Rack::Debugger if options[:debugger] | ||
run ActionDispatch::Utils.parse_config(options[:config]) | ||
}.to_app | ||
ENV["RAILS_ENV"] = options[:environment] | ||
RAILS_ENV.replace(options[:environment]) if defined?(RAILS_ENV) | ||
|
||
puts "=> Call with -d to detach" | ||
super | ||
ensure | ||
puts 'Exiting' unless options[:daemonize] | ||
end | ||
|
||
trap(:INT) { exit } | ||
def middleware | ||
middlewares = [] | ||
middlewares << [Rails::Rack::LogTailer] unless options[:daemonize] | ||
middlewares << [Rails::Rack::Debugger] if options[:debugger] | ||
Hash.new(middlewares) | ||
end | ||
|
||
puts "=> Ctrl-C to shutdown server" | ||
|
||
begin | ||
server.run(app, options.merge(:AccessLog => [])) | ||
ensure | ||
puts 'Exiting' | ||
def default_options | ||
{ | ||
:Port => 3000, | ||
:Host => "0.0.0.0", | ||
:environment => (ENV['RAILS_ENV'] || "development").dup, | ||
:rack_file => "#{Rails.root}/config.ru", | ||
:daemonize => false, | ||
:debugger => false, | ||
:pid => "#{Rails.root}/tmp/pids/server.pid", | ||
:AccessLog => [] | ||
} | ||
end | ||
end | ||
end |
1 change: 1 addition & 0 deletions
1
railties/lib/rails/generators/rails/app/templates/script/server
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
require File.expand_path('../../config/application', __FILE__) | ||
require 'rails/commands/server' | ||
Rails::Server.start |
1 comment
on commit a080323
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where is Rack::Server defined?