我正在尝试将文件放在myapplication/somefolder
下。 Google和Stackoverflow说我应该补充一下:
config.autoload_paths += %W(#{config.root}/somefolder)
在我config/application.rb
中,所以我做到了。
但文件没有加载。
我尝试了somefolder/myclass.rb
class Myclass
和class Somefolder::Myclass
,但仍然没有运气。
我可以看到在控制台Rails.application.config.autoload_paths
中找到的dir确实包含了我的/path/to/myapplication/somefolder
目录,所以应该没问题。
围绕此主题的所有其他问题都使用theapp/app/somefolder
或theapp/lib/somefolder
,但不使用theapp/somefolder
,所以也许这会使它变得腐烂。
因此,我尝试使用::Somefolder::MyClass
引用该类,但甚至没有帮助。
我正在使用Rails 3.2.1
答案 0 :(得分:2)
今天我自己也遇到了这个问题并决定深入研究。
您未在ActiveSupport::Dependencies.autoload_paths
中看到config.autoload_paths
中config/application.rb
添加rails/engine.rb
的路径的原因是,他们不会被复制到应用程序已初始化。请参阅railties
gem中的module Rails
class Engine < Railtie
…
# Set the paths from which Rails will automatically load source files,
# and the load_once paths.
#
# This needs to be an initializer, since it needs to run once
# per engine and get the engine as a block parameter
initializer :set_autoload_paths, :before => :bootstrap_hook do |app|
ActiveSupport::Dependencies.autoload_paths.unshift(*_all_autoload_paths)
ActiveSupport::Dependencies.autoload_once_paths.unshift(*_all_autoload_once_paths)
# Freeze so future modifications will fail rather than do nothing mysteriously
config.autoload_paths.freeze
config.eager_load_paths.freeze
config.autoload_once_paths.freeze
end
…
def _all_autoload_paths
@_all_autoload_paths ||= (config.autoload_paths + config.eager_load_paths + config.autoload_once_paths).uniq
end
…
end
end
:
MyClass
您是否有机会尝试从config/application.rb
内部调用config/application.rb
,或者甚至更早,从需要MyClass
的脚本或模块调用require File.expand_path('../../somefolder/my_class', __FILE__)
# now use MyClass
?如果是这样,您必须明确要求定义{{1}}的文件,例如:
{{1}}
答案 1 :(得分:1)
解决方法是直接转到ActiveSupport::Dependencies.autoload_paths
。
ActiveSupport::Dependencies.autoload_paths << "#{config.root}/somefolder"
但是我仍然在寻找config.autoload_paths无效的原因,所以如果你发布一个aswer,我会接受它!
答案 2 :(得分:1)
您应该为somefolder/my_class.rb
命名,以便自动加载MyClass
。您还应该在config.autoload_paths += %W(#{config.root}/somefolder)
中保留config/application.rb
行。