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

时间:2011-12-29 20:03:36

标签: ruby-on-rails-3 configuration

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

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

我想知道是否有人可以对加载顺序有所了解,以便我可以确保我有任何依赖关系或覆盖正确。另外,我只想知道这些事情是如何运作的。

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

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

谢谢!

2 个答案:

答案 0 :(得分:46)

Rails 4

2013年9月更新:对于Rails 4,它似乎再次发生了变化。现在有一个Rails-4 Guide on The Rails Initialization Process。您会注意到这个列表 比Rails 3更短。我不确定他们是否删除了一些深度或者什么......没有时间过去这一切:

  1. 仓/轨
  2. 配置/的boot.rb
  3. 导轨/ commands.rb
  4. ActionPack的/ LIB / action_dispatch.rb
  5. 导轨/命令/ server.rb
  6. Rack: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. Rack:lib / rack / server.rb
  15. 有关如何配置其中某些文件的更多详细信息,请参阅Rails-4 Guide on Configuring Rails Applications


    Rails 3

    2013年9月更新:对于Rails 3,它似乎已经发生了很大变化。现在有Rails-3 Guide on The Rails Initialization Process

    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续。轨道/命令/ 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
    48. 有关如何配置其中某些文件的更多详细信息,请参阅Rails-3 Guide on Configuring Rails Applications


      Rails 2

      最初(2011年12月),我偶然发现了一篇对How the Initialization Process Worked for Rails 2有一个很棒的解释的博客文章。

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

        有关如何配置其中某些文件的更多详细信息,请参阅Rails-2 Guide on Configuring Rails Applications

答案 1 :(得分:12)

这个答案用于补充已接受的答案,当开发.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

我的本​​地结果是

"/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

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