diff --git a/actionpack/lib/action_dispatch/middleware/callbacks.rb b/actionpack/lib/action_dispatch/middleware/callbacks.rb index 7cf75ffe63f2dfee2fc6bc6028d663bdfbd3ee7c..d07841218a12fd3e9a5e81d0c07212dbd9e5c86e 100644 --- a/actionpack/lib/action_dispatch/middleware/callbacks.rb +++ b/actionpack/lib/action_dispatch/middleware/callbacks.rb @@ -37,7 +37,7 @@ def self.after(*args, &block) def initialize(app, prepare_each_request = false) @app, @prepare_each_request = app, prepare_each_request - run_callbacks(:prepare) unless @prepare_each_request + run_callbacks(:prepare) end def call(env) diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb index afa79cad1c246c085208188e39e82f73eca15836..cb38d5a5dbd77a902437734a34d6976dae835c9c 100644 --- a/railties/lib/rails/application/finisher.rb +++ b/railties/lib/rails/application/finisher.rb @@ -27,19 +27,16 @@ module Finisher end 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 :build_middleware_stack do + app + end + 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/test/application/initializers/initializers_test.rb b/railties/test/application/initializers/initializers_test.rb index a6d37b15f16218543f2d48774adaf6feb9f19501..2e6a707175198e44815f5d8be8ab8bf307235afd 100644 --- a/railties/test/application/initializers/initializers_test.rb +++ b/railties/test/application/initializers/initializers_test.rb @@ -52,9 +52,22 @@ def setup assert $activerecord_configurations['development'] end - test "after_initialize happens before to_prepare (i.e. before the middleware stack is built) on production" do + test "after_initialize happens after to_prepare in development" do $order = [] add_to_config <<-RUBY + config.cache_classes = false + config.after_initialize { $order << :after_initialize } + config.to_prepare { $order << :to_prepare } + RUBY + + require "#{app_path}/config/environment" + assert [:to_prepare, :after_initialize], $order + end + + test "after_initialize happens after to_prepare in production" do + $order = [] + add_to_config <<-RUBY + config.cache_classes = true config.after_initialize { $order << :after_initialize } config.to_prepare { $order << :to_prepare } RUBY @@ -62,8 +75,7 @@ def setup require "#{app_path}/config/application" Rails.env.replace "production" require "#{app_path}/config/environment" - assert [:after_initialize, :to_prepare], $order + assert [:to_prepare, :after_initialize], $order end - end end