开发者

Rails 3 Initialization Order

开发者 https://www.devze.com 2023-01-24 08:06 出处:网络
Can someone please point me in the right direction for the order in which rails modules get instantiated.

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开发者_JS百科 gems get loaded?

2) When do config/initializers/* get loaded?

3) When do named routes in routes.rb get processed?


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.


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

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


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

0

精彩评论

暂无评论...
验证码 换一张
取 消