我有点困惑为什么我的项目无法加载它需要的文件,这是一个非常简单的项目树:
processor/
bin/
lib/
processor.rb
processor/
mapper.rb
reducer.rb
Run Code Online (Sandbox Code Playgroud)
我的processor.rb文件看起来像
require 'processor/mapper'
require 'processor/reducer'
class Processor
end
Run Code Online (Sandbox Code Playgroud)
只是为了测试文件映射器看起来像:
class Mapper
def run
puts "running map"
end
end
Run Code Online (Sandbox Code Playgroud)
但运行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>'
Run Code Online (Sandbox Code Playgroud)
Dyl*_*kow 74
默认情况下,Ruby $LOAD_PATH不会包含您的lib目录(即使这是您运行的文件所在的位置).
您可以告诉ruby口译员包含它:
ruby -Ilib lib/processor.rb
Run Code Online (Sandbox Code Playgroud)
或者您可以将lib文件夹添加到加载路径:
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'processor/mapper'
...
Run Code Online (Sandbox Code Playgroud)
cam*_*cam 34
Ruby 1.9不再包含"." 在加载路径中.做require "#{File.dirname(__FILE__)}/processor/mapper"或使用require_relative.
您始终可以通过检查$LOAD_PATH(或$:)来确定当前的负载路径
(编辑:$ LOAD_PATH不是$:LOAD_PATH)
require_relative在这种情况下,请使用Ruby :
require_relative "processor/mapper"
Run Code Online (Sandbox Code Playgroud)