以什么顺序为Rails加载配置文件?

pla*_*mbo 28 configuration ruby-on-rails-3

我正在尝试为不同的环境初始化不同的宝石.我正在使用初始化程序配置文件(用于Paperclip之类的东西)和环境配置文件(用于我的dev,test,qa,prod环境).

对于某些上下文,我试图让我的prod和qa服务器使用S3存储用于Paperclip,但是使用具有不同目录的本地存储用于开发和测试.我不知道这些配置文件的加载顺序.

我想知道是否有人可以阐明加载顺序,以便我可以确保我有任何依赖或覆盖正确.另外,我只想知道这些东西是如何工作的.

我对下面列出的目录/文件特别感兴趣

config/
    environments/
        develop.rb
        test.rb
        ...env-specific config files


    initializers/
        paperclip.rb
        ...gem-specific config files

    application.rb
    boot.rb
    deploy.rb
    environment.rb
    routes.rb
Run Code Online (Sandbox Code Playgroud)

谢谢!

pla*_*mbo 47

Rails 4

2013年9月更新:对于Rails 4,它似乎再次发生了变化.现在有一个关于Rails初始化过程Rails-4指南.您会注意到这个列表比Rails 3的列表短得多.我不确定它们是否删除了一些深度或者什么......没有时间重复这一切:

  1. 斌/导轨
  2. 配置/的boot.rb
  3. 导轨/ commands.rb
  4. ActionPack的/ LIB/action_dispatch.rb
  5. 轨道/命令/ server.rb
  6. 机架:lib/rack/server.rb
  7. 配置/应用
  8. 轨道::服务器#启动
  9. 到config/environment.rb
  10. 配置/ application.rb中
  11. railties/lib目录/导轨/ all.rb
  12. 回到config/environment.rb
  13. railties/lib目录/导轨/ application.rb中
  14. 机架:lib/rack/server.rb

有关如何配置其中一些文件的更多详细信息,请参阅配置Rails应用程序Rails-4指南


Rails 3

更新于2013年9月:对于Rails 3它似乎已经改变了很多.现在有一个关于Rails初始化过程Rails-3指南:

  1. bin/rails railties/lib/rails/cli.rb script/rails config/boot.rb.
  2. rails/commands.rb actionpack/lib/action_dispatch.rb
  3. 的ActiveSupport/LIB/active_support.rb
  4. 的ActiveSupport/LIB/active_support/lazy_load_hooks.rb
  5. 的ActiveSupport/lib目录/ active_support /偏转/ methods.rb
  6. actionpack/lib/action_dispatch.rb续,rails/commands/server.rb
  7. Rack:lib/rack/server.rb Rails :: Server #start config/environment.rb
  8. config/application.rb加载Rails railties/lib/rails/all.rb
  9. railties/lib/rails.rb railties/lib/rails/ruby​​_version_check.rb
  10. active_support/core_ext /内核/ reporting.rb
  11. active_support/core_ext/logger.rb railties/lib/rails/application.rb
  12. active_support/file_update_checker.rb railties/lib/rails/plugin.rb
  13. railties/lib/rails/engine.rb railties/lib/rails/railtie.rb.
  14. railties/lib目录/导轨/ initializable.rb
  15. railties/lib目录/导轨/ configuration.rb
  16. 的ActiveSupport/LIB/active_support/deprecation.rb
  17. 的ActiveSupport/lib目录/ active_support /折旧/ behaviors.rb
  18. 的ActiveSupport/LIB/active_support/notifications.rb
  19. 的ActiveSupport/core_ext /阵列/涡卷
  20. 的ActiveSupport/lib目录/ active_support /折旧/ reporting.rb
  21. 的ActiveSupport/lib目录/ active_support /折旧/ method_wrappers.rb
  22. 的ActiveSupport/lib目录/ active_support /折旧/ proxy_wrappers.rb
  23. active_support/ordered_options railties/lib/rails/paths.rb
  24. railties/lib目录/导轨/ rack.rb
  25. 的ActiveSupport/LIB/active_support/inflector.rb
  26. active_support /语调
  27. activesupport/lib/active_support/inflector/transliterate.rb返回
  28. railties/lib/rails/railtie.rb railties/lib/rails/engine/railties.rb
  29. 返回railties/lib/rails/engine.rb返回
  30. railties/lib/rails/plugin.rb返回
  31. railties/lib/rails/application.rb railties/lib/rails/version.rb.
  32. 的ActiveSupport/LIB/active_support/railtie.rb
  33. 的ActiveSupport/LIB/active_support/i18n_railtie.rb
  34. railties/lib/rails/railtie/configuration.rb返回
  35. activesupport/lib/active_support/i18n_railtie.rb返回
  36. 的ActiveSupport/LIB/active_support/railtie.rb
  37. 的ActiveSupport/LIB/action_dispatch/railtie.rb
  38. activesupport/lib/action_dispatch.rb activemodel/lib/active_model.rb
  39. activesupport/lib/active_support/i18n.rb返回
  40. activesupport/lib/action_dispatch.rb返回
  41. activesupport/lib/action_dispatch/railtie.rb返回
  42. railties/lib/rails.rb返回railties/lib/rails/all.rb
  43. 了activerecord/LIB/active_record/railtie.rb
  44. activerecord/lib/active_record.rb返回
  45. 了activerecord/LIB/active_record/railtie.rb
  46. ActionPack的/ LIB/action_controller/railtie.rb
  47. ActionPack的/ LIB/action_view.rb

有关如何配置其中一些文件的更多详细信息,请参阅配置Rails应用程序Rails-3指南


Rails 2

最初(2011年12月),我偶然发现了一篇博文,其中有一篇关于初始化过程如何为Rails 2工作的精彩解释.

  1. 配置/ preinitializer.rb
  2. 到config/environment.rb
  3. 配置/环境/#{RAILS_ENV} .RB
  4. 插件初始化
  5. 宝石初始化
  6. 配置/初始化/*.RB
  7. 所有after_initialize块,按照它们的定义顺序(与上面的顺序相同)
  8. 在environment.rb中Rails :: Initializer.run调用/阻塞下面的任何垃圾

有关如何配置其中一些文件的更多详细信息,请参阅配置Rails应用程序Rails-2指南


ray*_*kin 14

这个答案用于补充已接受的答案,当develop.rb和其他init文件加载时,接受的答案没有提及.

在ruby 2.0中,我在bin/rails中插入以下代码,然后运行'bin/rails s'来查看本地应用程序文件的加载顺序.在此示例中,我的项目名称是bole_api.

files = []
tp = TracePoint.new(:line) do |tp|
  if tp.path =~ /bole_api/
    unless files.include? tp.path
    puts "#{tp.path}".inspect
    files.push(tp.path)
    end
  end
end
tp.enable
Run Code Online (Sandbox Code Playgroud)

而我的本地结果是

"/home/leijing/studio/bole_api/bin/rails"
"/home/leijing/studio/bole_api/config/boot.rb"
"/home/leijing/studio/bole_api/Gemfile"
"/home/leijing/studio/bole_api/config/application.rb"
=> Booting WEBrick
=> Rails 4.1.1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)
=> Ctrl-C to shutdown server
"/home/leijing/studio/bole_api/config.ru"
"/home/leijing/studio/bole_api/config/environment.rb"
"/home/leijing/studio/bole_api/config/environments/development.rb"
"/home/leijing/studio/bole_api/config/initializers/carrierwave.rb"
"/home/leijing/studio/bole_api/config/initializers/cookies_serializer.rb"
"/home/leijing/studio/bole_api/config/initializers/filter_parameter_logging.rb"
"/home/leijing/studio/bole_api/config/initializers/rabl_init.rb"
"/home/leijing/studio/bole_api/config/initializers/session_store.rb"
"/home/leijing/studio/bole_api/config/initializers/wrap_parameters.rb"
"/home/leijing/studio/bole_api/config/routes.rb"
"/home/leijing/studio/bole_api/app/api/bole_app_api.rb"
"/home/leijing/studio/bole_api/app/api/home_api.rb"
"/home/leijing/studio/bole_api/app/api/video_api.rb"
[2014-06-27 11:06:57] INFO  WEBrick 1.3.1
[2014-06-27 11:06:57] INFO  ruby 2.1.0 (2013-12-25) [x86_64-linux]
[2014-06-27 11:06:57] INFO  WEBrick::HTTPServer#start: pid=30157 port=3000
Run Code Online (Sandbox Code Playgroud)

从上面的输出中,您可以获得本地文件加载顺序的视图.并结合http://edgeguides.rubyonrails.org/initialization.html的结论,您可以获得整个初始化过程的视图.