diff options
author | José Valim <jose.valim@gmail.com> | 2010-02-18 18:39:39 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-02-18 18:56:11 +0100 |
commit | a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59 (patch) | |
tree | b66a2d0cba3215d7c651c473cdc415a95a01f791 /railties | |
parent | 1477a6101da631a117427a1e53668dfe093a3726 (diff) | |
download | rails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.tar.gz rails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.tar.bz2 rails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.zip |
Ensure config.after_initializer is executed before building the middleware stack.
Diffstat (limited to 'railties')
-rw-r--r-- | railties/lib/rails/application/finisher.rb | 10 | ||||
-rw-r--r-- | railties/lib/rails/engine.rb | 1 | ||||
-rw-r--r-- | railties/test/application/initializers/initializers_test.rb | 14 |
3 files changed, 21 insertions, 4 deletions
diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index b722679ec2..afa79cad1c 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -27,17 +27,19 @@ module Rails end end - initializer :build_middleware_stack do - app - end - # Fires the user-supplied after_initialize block (config.after_initialize) + # Should run before the middleware stack is built, because building the + # middleware already fires to_prepare callbacks in test and production. initializer :after_initialize do config.after_initialize_blocks.each do |block| block.call(self) end end + initializer :build_middleware_stack do + app + end + # Disable dependency loading during request cycle initializer :disable_dependency_loading do if config.cache_classes && !config.dependency_loading diff --git a/railties/lib/rails/engine.rb b/railties/lib/rails/engine.rb index a158bb7b70..efa11b466a 100644 --- a/railties/lib/rails/engine.rb +++ b/railties/lib/rails/engine.rb @@ -15,6 +15,7 @@ module Rails def inherited(base) unless abstract_railtie?(base) base.called_from = begin + # Remove the line number from backtraces making sure we don't leave anything behind call_stack = caller.map { |p| p.split(':')[0..-2].join(':') } File.dirname(call_stack.detect { |p| p !~ %r[railties[\w\-]*/lib/rails|rack[\w\-]*/lib/rack] }) end diff --git a/railties/test/application/initializers/initializers_test.rb b/railties/test/application/initializers/initializers_test.rb index 0c3de7ce33..a6d37b15f1 100644 --- a/railties/test/application/initializers/initializers_test.rb +++ b/railties/test/application/initializers/initializers_test.rb @@ -51,5 +51,19 @@ module ApplicationTests assert $activerecord_configurations assert $activerecord_configurations['development'] end + + test "after_initialize happens before to_prepare (i.e. before the middleware stack is built) on production" do + $order = [] + add_to_config <<-RUBY + config.after_initialize { $order << :after_initialize } + config.to_prepare { $order << :to_prepare } + RUBY + + require "#{app_path}/config/application" + Rails.env.replace "production" + require "#{app_path}/config/environment" + assert [:after_initialize, :to_prepare], $order + end + end end |