From 37e264d7e132969e1faf87247e66abf909cedf29 Mon Sep 17 00:00:00 2001 From: "Hongli Lai (Phusion)" Date: Tue, 8 Jun 2010 13:22:25 +0200 Subject: Fix unicorn_rails compatibility with the latest Rails 3 code 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 --- bin/unicorn_rails | 26 ++++++++++++++++++++++++-- 1 file 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 -- cgit v1.2.3-24-ge0c7