Rails 3 Initialization Order
Can someone please point me in the right direction for the order in which rails modules get instantiated.
The main things I'm trying to find are:
1) When do gems get loaded?
2) When do config/initializers/* get loaded?
3) When do named routes in routes.rb get processed?
Check out this insanely detailed (and long) piece of documentation on the initialization process:
Answering your question is easy by adding some puts statements in your Rails application. (It seems like a lot of people are reluctant to dig in and do this, but I really recommend it!) So, by experimentation and observation alone, here is the order of the things you mentioned:
Here is a little more detail:
This loads the application gems by using bundler:
require 'rubygems' # Set up gems listed in the Gemfile. ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
They run in alphabetical order.
If you are curious what triggers this, take a look at engine.rb in the railties source code. (It is useful to know that a Rails Application is a subclass of a Rails Engine.)
initializer :load_config_initializers do config.paths["config/initializers"].existent.sort.each do |initializer| load(initializer) end end
By observation, I see that route drawing (specification) occurs next.
But looking at the details is more involved, so if you are interested I would read SO: Controlling routes loading order from Engines and perhaps take a look at the :add_routing_paths initializer in engine.rb.
I started a console in Rails 3 and here is the order:
- config/initializers/*.rb (In alphabetic order)
I really don't know but logically in this order
1) The only way I know how to edit gems is by editing the source file themselves. Moreover rails itself and basically everything with rails is a gem so I'm sure they are loaded first
2) Initializers are probably loaded second, or at least considering the three things you mentioned, because they might load information or modules that routes with resources and associations need.
3) Process of elimination
In terms of inner order it's probably abc
Don't take this seriously though :)