给定文件结构
lib
app/
feature.rb
app.rb
并且文件app.rb
包含:
require 'active_support'
require 'active_support/dependencies'
module App
extend ActiveSupport::Autoload
autoload :Feature, 'app/feature.rb'
def self.start
p Feature.new
end
end
它抱怨LoadError: cannot load such file -- app/feature.rb
我尝试传递绝对系统路径,没有路径,来自模块的feature.rb
的相对路径以及来自执行点的相对路径(lib
上方的一个目录)。
这似乎与Rails在source中所做的完全相同。
这样看起来应该很直观,不是吗?
答案 0 :(得分:2)
解决方案是将文件添加到Ruby解释器加载路径,如下所示:$LOAD_PATH.unshift(File.dirname(__FILE__))
。
基本上,它允许Ruby查找这些文件。在已生成新应用程序时已配置的Rails中。在构建gem时,您可以在规范中将文件或dirs添加到加载路径。除此之外,比如说这个例子中的脚本,您必须手动执行此操作。默认情况下autoload
不执行此操作,因此您必须指定(对我来说有点令人困惑)Ruby可以访问的路径。
我确信有人可以清理这个解释,但这就是我理解它的方式。
答案 1 :(得分:0)
默认情况下,我不相信Rails的自动加载路径上有lib
。我们在config/application.rb
:
config.eager_load_paths << Rails.root.join('lib')