我有点困惑为什么我的项目无法加载它需要的文件,这是一个非常简单的项目树:
processor/
bin/
lib/
processor.rb
processor/
mapper.rb
reducer.rb
和我的processor.rb
文件看起来像
require 'processor/mapper'
require 'processor/reducer'
class Processor
end
只是为了测试文件映射器的样子:
class Mapper
def run
puts "running map"
end
end
但是运行ruby lib/processor.rb
会导致:
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from lib/processor.rb:3:in `<class:Processor>'
from lib/processor.rb:2:in `<main>'
答案 0 :(得分:72)
Ruby的$LOAD_PATH
默认情况下不会包含您的lib
目录(即使这是您运行的文件所在的位置)。
您可以告诉ruby
解释器包含它:
ruby -Ilib lib/processor.rb
或者您可以将lib
文件夹添加到加载路径:
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'processor/mapper'
...
答案 1 :(得分:34)
Ruby 1.9不再包含“。”在加载路径中。请require "#{File.dirname(__FILE__)}/processor/mapper"
或使用require_relative
。
您始终可以通过检查$LOAD_PATH
(或$:
)确定当前的加载路径
(编辑:$ LOAD_PATH而非$:LOAD_PATH)
答案 2 :(得分:4)
在这种情况下使用Ruby的require_relative
:
require_relative "processor/mapper"