Ensure config.after_initializer is executed before building the middleware stack.

This commit is contained in:
José Valim 2010-02-18 18:39:39 +01:00
parent 1477a6101d
commit a5684dfa3c
3 changed files with 21 additions and 4 deletions

@ -27,17 +27,19 @@ module Finisher
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

@ -15,6 +15,7 @@ class << self
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

@ -51,5 +51,19 @@ def setup
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