From 4accf4449390c649bce0b1c9d84314d65fd41f8e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 10 Jun 2010 08:47:10 +0000 Subject: respect "working_directory" wrt config.ru Since we added support for the "working_directory" parameter, it often became unclear where/when certain paths would be bound. There are some extremely nasty dependencies and ordering issues when doing this. It's all pretty fragile, but works for now and we even have a full integration test to keep it working. I plan on cleaning this up 2.x.x to be less offensive to look at (Rainbows! and Zbatery are a bit tied to this at the moment). Thanks to Pierre Baillet for reporting this. ref: http://mid.gmane.org/AANLkTimKb7JARr_69nfVrJLvMZH3Gvs1o_KwZFLKfuxy@mail.gmail.com --- bin/unicorn | 5 +---- bin/unicorn_rails | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'bin') diff --git a/bin/unicorn b/bin/unicorn index beece97..2cc10b1 100755 --- a/bin/unicorn +++ b/bin/unicorn @@ -107,10 +107,7 @@ opts = OptionParser.new("", 24, ' ') do |opts| opts.parse! ARGV end -ru = ARGV[0] || "config.ru" -abort "configuration file #{ru} not found" unless File.exist?(ru) - -app = Unicorn.builder(ru, opts) +app = Unicorn.builder(ARGV[0] || 'config.ru', opts) options[:listeners] << "#{host}:#{port}" if set_listener if $DEBUG diff --git a/bin/unicorn_rails b/bin/unicorn_rails index 2f88bc1..e9cac00 100755 --- a/bin/unicorn_rails +++ b/bin/unicorn_rails @@ -107,8 +107,6 @@ opts = OptionParser.new("", 24, ' ') do |opts| opts.parse! ARGV end -ru = ARGV[0] || (File.exist?('config.ru') ? 'config.ru' : nil) - def rails_dispatcher if ::Rails::VERSION::MAJOR >= 3 && ::File.exist?('config/application.rb') if ::File.read('config/application.rb') =~ /^module\s+([\w:]+)\s*$/ @@ -127,9 +125,20 @@ def rails_dispatcher result || abort("Unable to locate the application dispatcher class") end -def rails_builder(daemonize) +def rails_builder(ru, opts, daemonize) + return Unicorn.builder(ru, opts) if ru + + # allow Configurator to parse cli switches embedded in the ru file + Unicorn::Configurator::RACKUP.update(:file => :rails, :optparse => opts) + # this lambda won't run until after forking if preload_app is false + # this runs after config file reloading lambda do || + # Rails 3 includes a config.ru, use it if we find it after + # working_directory is bound. + ::File.exist?('config.ru') and + return Unicorn.builder('config.ru', opts).call + # Load Rails and (possibly) the private version of Rack it bundles. begin require ::File.expand_path('config/boot') @@ -179,7 +188,7 @@ def rails_builder(daemonize) end end -app = ru ? Unicorn.builder(ru, opts) : rails_builder(daemonize) +app = rails_builder(ARGV[0], opts, daemonize) options[:listeners] << "#{host}:#{port}" if set_listener if $DEBUG -- cgit v1.2.3-24-ge0c7