如何列出Rails 3的所有自动加载路径(How to list all autoload path

2019-08-03 08:28发布

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

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

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

Answer 1:

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

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

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



Answer 2:

更新:使用下面的ActiveSupport :: Dependencies.autoload_paths请参阅劳拉的答案。 我在这里离开了这个答案的替代方法。

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

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

这应该包括其他的宝石和定制的负载路径中添加的所有自动加载路径。



Answer 3:

Rails.application.instance_variable_get(:"@_all_autoload_paths")


文章来源: How to list all autoload paths in Rails 3