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?

Answers


Check out this insanely detailed (and long) piece of documentation on the initialization process:

http://guides.rubyonrails.org/initialization.html


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:

  1. boot.rb
  2. config/initializers/*
  3. routes.rb

Here is a little more detail:

1. 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'])
2. 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
3. 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.


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)

I really don't know but logically in this order

  1. gems
  2. initializers
  3. routes

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 :)


Need Your Help

How to Change HTML Tags Using Javascript

javascript html css tags edit

I have some HTML code that looks like this:

Performance considerations on deleting Managed Objects using Cascade rule in Core Data

ios performance core-data cascading-deletes object-relationships

I searched within SO but I didn't find a any suggestions to boost performances on deleting Managed Object in Core Data when dealing with relationships.