【问题标题】:In what order are the config files loaded for Rails?为 Rails 加载配置文件的顺序是什么?
【发布时间】:2011-12-29 20:03:36
【问题描述】:

我正在尝试为不同的环境初始化不同的 gem。我正在使用初始化程序配置文件(用于 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

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 configuration


    【解决方案1】:

    Rails 6.0

    2019 年 11 月更新:Initialization ProcessConfiguration

    与 Rails 5.2 相同

    导轨 5.2

    2019 年 11 月更新:Initialization ProcessConfiguration

    启动

    1. railties/exe/rails
    2. railties/lib/rails/app_loader.rb
    3. bin/rails
    4. config/boot.rb
    5. rails/commands.rb
    6. rails/command.rb
    7. actionpack/lib/action_dispatch.rb
    8. rails/commands/server/server_command.rb
    9. 机架:lib/rack/server.rb
    10. 配置/应用程序
    11. Rails::Server#start
    12. config/environment.rb
    13. config/application.rb

    加载

    1. railties/lib/rails/all.rb
    2. 返回 config/environment.rb
    3. railties/lib/rails/application.rb
    4. 机架:lib/rack/server.rb

    导轨 4.2

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

    1. bin/rails
    2. config/boot.rb
    3. rails/commands.rb
    4. actionpack/lib/action_dispatch.rb
    5. rails/commands/server.rb
    6. 机架:lib/rack/server.rb
    7. 配置/应用程序
    8. Rails::Server#start
    9. config/environment.rb
    10. config/application.rb
    11. railties/lib/rails/all.rb
    12. 返回 config/environment.rb
    13. railties/lib/rails/application.rb
    14. 机架:lib/rack/server.rb

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


    导轨 3.2

    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/inflector/methods.rb
    6. actionpack/lib/action_dispatch.rb 续。 rails/commands/server.rb
    7. 机架: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/kernel/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/rails/initializable.rb
    15. railties/lib/rails/configuration.rb
    16. activesupport/lib/active_support/deprecation.rb
    17. activesupport/lib/active_support/deprecation/behaviors.rb
    18. activesupport/lib/active_support/notifications.rb
    19. activesupport/core_ext/array/wrap
    20. activesupport/lib/active_support/deprecation/reporting.rb
    21. activesupport/lib/active_support/deprecation/method_wrappers.rb
    22. activesupport/lib/active_support/deprecation/proxy_wrappers.rb
    23. active_support/ordered_options railties/lib/rails/paths.rb
    24. railties/lib/rails/rack.rb
    25. activesupport/lib/active_support/inflector.rb
    26. active_support/inflections
    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-3 Guide on Configuring Rails Applications


    导轨 2.3

    最初(2011 年 12 月),我偶然发现了一篇博客文章,其中对 How the Initialization Process Worked for Rails 2 进行了精彩的解释。

    1. config/preinitializer.rb
    2. config/environment.rb
    3. config/environments/#{RAILS_ENV}.rb
    4. 插件初始化
    5. gem 初始化
    6. config/initializer/*.rb
    7. 所有 after_initialize 块,按照它们定义的顺序(与上面的顺序相同)
    8. 在 environment.rb 中的 Rails::Initializer.run 调用/块下方留下的任何垃圾

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

    【讨论】:

    • 这是用于 Rails 2 的吗?我不认为 rails 3 有 preinitializer.rb
    • 另外,您应该添加在环境文件之后和初始化程序之前运行的 before_initialize 回调。
    • 我在 Rails 2 应用程序中有 config/boot.rb,这有意义吗?
    • @juanpastas - 我不确定,但它是 Rails 3 中的一件事 (guides.rubyonrails.org/v3.2.13/…) 如果它在 Rails 2 中停留,我不会感到惊讶。
    • @AniketShivamTiwari 现在似乎有一个官方的 Rails 指南正在维护中。可以在这里找到:guides.rubyonrails.org/initialization.html
    【解决方案2】:

    此答案用于补充接受的答案,接受的答案在 development.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的结论,可以了解整个初始化过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-16
      • 2015-07-25
      • 2022-10-07
      • 2011-11-26
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多