aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-09-02 12:54:16 +0200
committerJosé Valim <jose.valim@gmail.com>2010-09-02 12:54:21 +0200
commit48bf667a8b1c489bd6edff0b8322324a7a1b06bc (patch)
tree0abae7b918253749988d4e575b31e405e41dfac7
parent38a421b34d0b414564e919f67d339fac067a56e6 (diff)
downloadrails-48bf667a8b1c489bd6edff0b8322324a7a1b06bc.tar.gz
rails-48bf667a8b1c489bd6edff0b8322324a7a1b06bc.tar.bz2
rails-48bf667a8b1c489bd6edff0b8322324a7a1b06bc.zip
Ensure routes are loaded only after the initialization process finishes, ensuring all configuration options were applied.
-rw-r--r--actionpack/lib/action_dispatch/railtie.rb5
-rw-r--r--railties/lib/rails/application/finisher.rb7
-rw-r--r--railties/test/application/routing_test.rb17
3 files changed, 24 insertions, 5 deletions
diff --git a/actionpack/lib/action_dispatch/railtie.rb b/actionpack/lib/action_dispatch/railtie.rb
index a3af37947a..ed066ad75e 100644
--- a/actionpack/lib/action_dispatch/railtie.rb
+++ b/actionpack/lib/action_dispatch/railtie.rb
@@ -8,10 +8,5 @@ module ActionDispatch
config.action_dispatch.ip_spoofing_check = true
config.action_dispatch.show_exceptions = true
config.action_dispatch.best_standards_support = true
-
- # Prepare dispatcher callbacks and run 'prepare' callbacks
- initializer "action_dispatch.prepare_dispatcher" do |app|
- ActionDispatch::Callbacks.to_prepare { app.routes_reloader.execute_if_updated }
- end
end
end
diff --git a/railties/lib/rails/application/finisher.rb b/railties/lib/rails/application/finisher.rb
index 855467227b..8fd2aa0bce 100644
--- a/railties/lib/rails/application/finisher.rb
+++ b/railties/lib/rails/application/finisher.rb
@@ -46,6 +46,13 @@ module Rails
ActiveSupport.run_load_hooks(:after_initialize, self)
end
+ # Force routes to be loaded just at the end and add it to to_prepare callbacks
+ initializer :set_routes_reloader do |app|
+ reloader = lambda { app.routes_reloader.execute_if_updated }
+ reloader.call
+ ActionDispatch::Callbacks.to_prepare(&reloader)
+ 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/routing_test.rb b/railties/test/application/routing_test.rb
index febc53bac9..53bb7868da 100644
--- a/railties/test/application/routing_test.rb
+++ b/railties/test/application/routing_test.rb
@@ -215,6 +215,23 @@ module ApplicationTests
end
end
+ test 'routes are loaded just after initialization' do
+ require "#{app_path}/config/application"
+
+ ActiveSupport.on_load(:after_initialize) do
+ ::InitializeRackApp = lambda { |env| [200, {}, ["InitializeRackApp"]] }
+ end
+
+ app_file 'config/routes.rb', <<-RUBY
+ AppTemplate::Application.routes.draw do |map|
+ match 'foo', :to => ::InitializeRackApp
+ end
+ RUBY
+
+ get '/foo'
+ assert_equal "InitializeRackApp", last_response.body
+ end
+
test 'resource routing with irrigular inflection' do
app_file 'config/initializers/inflection.rb', <<-RUBY
ActiveSupport::Inflector.inflections do |inflect|