14

你如何列出 Rails 中的所有自动加载路径?

当我这样做时,在 Rails 控制台中,它只列出添加到配置中的自定义路径:

$ rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > MyRailsApp::Application.config.autoload_paths
=> [] 
4

3 回答 3

24

您可以通过以下方式访问所有自动加载路径ActiveSupport::Dependencies.autoload_paths

从控制台调用它或从命令行运行rails r 'puts ActiveSupport::Dependencies.autoload_paths'

更多信息在这里(对于 Rails 4,但它也适用于 Rails 3): http: //guides.rubyonrails.org/autoloading_and_reloading_constants.html#autoload-paths

于 2016-04-07T07:46:10.693 回答
17

更新:请使用下面的 ActiveSupport::Dependencies.autoload_paths 查看劳拉的回答。我把这个答案留在这里作为另一种方法。

其中包含在Rails::EngineRails 应用程序的模块中,有如下方法:

def _all_autoload_paths
  @_all_autoload_paths ||= (config.autoload_paths + config.eager_load_paths + config.autoload_once_paths).uniq
end

所以,你可以这样做:

(MyRailsApp::Application.config.autoload_paths + MyRailsApp::Application.config.eager_load_paths + MyRailsApp::Application.config.autoload_once_paths).uniq

或者:

[:autoload_paths, :eager_load_paths, :autoload_once_paths].collect{|m|MyRailsApp::Application.config.send(m)}.flatten.uniq

要不就:

MyRailsApp::Application._all_autoload_paths

Rails 3.2.9 中的默认结果是:

["/path/to/my_rails_app/app/assets", "/path/to/my_rails_app/app/controllers", "/path/to/my_rails_app/app/helpers", "/path/to/my_rails_app/app/mailers", "/path/to/my_rails_app/app/models"]

这应该包括由其他 gem 添加的所有自动加载路径和自定义加载路径。

于 2012-11-29T15:27:59.213 回答
2
Rails.application.instance_variable_get(:"@_all_autoload_paths")
于 2018-03-14T07:37:15.137 回答