Reputation: 12759
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?
Upvotes: 15
Views: 10415
Reputation: 51
I started a console in Rails 3 and here is the order:
script/rails
config/boot.rb
config/application.rb
config/environment.rb
config/initializers/*.rb
(In alphabetic order)Upvotes: 2
Reputation: 11055
Check out this insanely detailed (and long) piece of documentation on the initialization process:
http://guides.rubyonrails.org/initialization.html
Upvotes: 9
Reputation: 32715
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:
boot.rb
config/initializers/*
routes.rb
Here is a little more detail:
boot.rb
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'])
config/initializers/*
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
routes.rb
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.
Upvotes: 13
Reputation: 42863
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 :)
Upvotes: -5