aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-02-18 18:39:39 +0100
committerJosé Valim <jose.valim@gmail.com>2010-02-18 18:56:11 +0100
commita5684dfa3c16472bfa5d5d861ba78cb6dbadcb59 (patch)
treeb66a2d0cba3215d7c651c473cdc415a95a01f791
parent1477a6101da631a117427a1e53668dfe093a3726 (diff)
downloadrails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.tar.gz
rails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.tar.bz2
rails-a5684dfa3c16472bfa5d5d861ba78cb6dbadcb59.zip
Ensure config.after_initializer is executed before building the middleware stack.
-rw-r--r--railties/lib/rails/application/finisher.rb10
-rw-r--r--railties/lib/rails/engine.rb1
-rw-r--r--railties/test/application/initializers/initializers_test.rb14
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