2011-12-29 68 views
26

我正在嘗試爲不同的環境初始化不同的寶石。我使用初始化配置文件(用於Paperclip等)和環境配置文件(用於我的開發,測試,qa,prod環境)。Rails的配置文件以什麼順序加載?

對於某些情況下,我試圖讓我的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 

感謝文件!

回答

45

Rails 4

2013年9月更新:For 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. 架:LIB/rack/server.rb
  7. 配置/應用
  8. 的Rails ::服務器#啓動
  9. 到config/environment.rb
  10. 的config/application.rb中
  11. railties/lib目錄/導軌/ all.rb
  12. 返回的config /環境.RB
  13. railties/lib目錄/導軌/ application.rb中
  14. 架:LIB /架/ server.rb

有關如何配置一些這些文件的更詳細信息,請參閱Rails-4 Guide on Configuring Rails Applications


的Rails 3

更新2013年9月:對於Rails 3中似乎它已經改變了很多。現在有一個Rails-3 Guide on The Rails Initialization Process

  1. 斌/導軌railties/lib中/導軌/ cli.rb腳本/導軌配置/的boot.rb
  2. 軌/ 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 cont'd。導軌/命令/ server.rb
  7. 架:LIB /架/ server.rb的Rails ::服務器#開始到config/environment.rb
  8. 的config/application.rb中加載Rails的railties/lib目錄/導軌/ all.rb
  9. railties/lib目錄/ rails.rb railties/lib中/導軌/ ruby​​_version_check.rb
  10. active_support/core_ext /內核/ reporting.rb
  11. active_support/core_ext/logger.rb railties/lib中/導軌/ application.rb中
  12. active_support/file_update_checker.rb railties/lib/rails/plugin.rb
  13. railties/lib/rai LS/engine.rb railties/LIB /軌道/ 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 /軌道/ paths.rb
  24. railties/LIB /軌道/rack.rb
  25. 的ActiveSupport/lib目錄/ active_support/inflector.rb
  26. active_support /語調
  27. 的ActiveSupport/lib目錄/ active_support /偏轉/ transliterate.rb回到
  28. railties/lib目錄/鐵軌/鐵路tie.rb railties/lib目錄/導軌/發動機/ railties.rb
  29. 回到railties/lib目錄/導軌/ engine.rb回到
  30. railties/lib目錄/導軌/ plugin.rb回到
  31. railties/lib目錄/rails/application.rb railties/LIB /軌道/ version.rb
  32. 的ActiveSupport/LIB/active_support/railtie.rb
  33. 的ActiveSupport/LIB/active_support/i18n_railtie.rb
  34. railties/LIB /軌道/ 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目錄/導軌/ 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

最初(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. 留下路軌:: Initializer.run呼叫/塊以下的environment.rb

有關詳細信息,關於如何配置這些文件中的所有垃圾看到Rails-2 Guide on Configuring Rails Applications

+0

這是用於導軌2嗎?我不認爲rails 3也有preinitializer.rb – Dty 2013-02-16 12:07:05

+1

也應該添加在before_initialize回調函數中,這些回調函數在環境文件之後和初始化程序之前運行.. – 2013-03-28 23:02:07

+0

我在Rails 2應用程序中配置了/ boot.rb,這有意義嗎? – juanpastas 2014-02-13 15:56:01

12

這個答案是用來補充接受的答案,接受的答案沒有提及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的結論,可以得到整個初始化過程的一個視圖。