如何在Rails 3中列出所有自动加载路径

Gar*_*ver 9 ruby-on-rails autoload autoloader ruby-on-rails-3

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

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

$ rails c
Loading development environment (Rails 3.2.9)
1.9.3p194 :001 > MyRailsApp::Application.config.autoload_paths
=> [] 
Run Code Online (Sandbox Code Playgroud)

Lau*_*nen 20

您可以访问所有自动加载路径 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

  • 同样适用于Rails 5 (3认同)
  • 也可以在 Rails 6 中工作! (2认同)

Gar*_*ver 17

更新:请使用下面的ActiveSupport :: Dependencies.autoload_paths查看Laura的答案.我在这里留下这个答案作为替代方法.

Rails::Engine其中包括该Rails应用程序的模块中,存在以下的方法:

def _all_autoload_paths
  @_all_autoload_paths ||= (config.autoload_paths + config.eager_load_paths + config.autoload_once_paths).uniq
end
Run Code Online (Sandbox Code Playgroud)

所以,你可以这样做:

(MyRailsApp::Application.config.autoload_paths + MyRailsApp::Application.config.eager_load_paths + MyRailsApp::Application.config.autoload_once_paths).uniq
Run Code Online (Sandbox Code Playgroud)

要么:

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

要不就:

MyRailsApp::Application._all_autoload_paths
Run Code Online (Sandbox Code Playgroud)

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"]
Run Code Online (Sandbox Code Playgroud)

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