diff options
author | Hongli Lai (Phusion) <hongli@phusion.nl> | 2010-06-08 13:22:25 +0200 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-06-08 19:23:03 +0000 |
commit | 37e264d7e132969e1faf87247e66abf909cedf29 (patch) | |
tree | d8b362e32d176191cc4909dd809a5c212fbae5e0 /bin/unicorn_rails | |
parent | ac0033c74c7477d5fe13bd95df4e704b9544a9ae (diff) | |
download | unicorn-37e264d7e132969e1faf87247e66abf909cedf29.tar.gz |
This allows us to properly detect Rails 3 installations in cases where config.ru is not present. [ew: expanded commit message fixed static file serving, more flexible regexp for matching module ] ref: mid.gmane.org/AANLkTiksBxIo_PFWoiPTWi1entXZRb7D2uE-Rl7H3lbw@mail.gmail.com Acked-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'bin/unicorn_rails')
-rwxr-xr-x | bin/unicorn_rails | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/bin/unicorn_rails b/bin/unicorn_rails index 45a9b11..ed235ba 100755 --- a/bin/unicorn_rails +++ b/bin/unicorn_rails @@ -109,6 +109,24 @@ 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*$/ + app_module = Object.const_get($1) + begin + result = app_module::Application + rescue NameError + end + end + end + + if result.nil? && defined?(ActionController::Dispatcher) + result = ActionController::Dispatcher.new + end + + result || abort("Unable to locate the application dispatcher class") +end + def rails_builder(daemonize) # this lambda won't run until after forking if preload_app is false lambda do || @@ -149,8 +167,12 @@ def rails_builder(daemonize) use Rails::Rack::LogTailer unless daemonize use Rails::Rack::Debugger if $DEBUG map(map_path) do - use Rails::Rack::Static - run ActionController::Dispatcher.new + if defined?(ActionDispatch::Static) + use ActionDispatch::Static, "#{Rails.root}/public" + else + use Rails::Rack::Static + end + run rails_dispatcher end end end.to_app |