我有点困惑,为什么我的项目不能加载它需要的文件,这是一个非常简单的项目树:
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>'
发布于 2011-07-13 05:51:31
默认情况下,Ruby的$LOAD_PATH
不会包含您的lib
目录(即使您正在运行的文件位于该目录中)。
您可以告诉ruby
解释器将其包括在内:
ruby -Ilib lib/processor.rb
或者,您可以将lib
文件夹添加到加载路径:
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'processor/mapper'
...
发布于 2011-07-13 05:47:36
Ruby 1.9不再包含“。在加载路径中。执行require "#{File.dirname(__FILE__)}/processor/mapper"
或使用require_relative
。
您始终可以通过检查$LOAD_PATH
(或$:
)来确定当前加载路径
(编辑:$LOAD_PATH而不是$:LOAD_PATH)
发布于 2016-09-06 23:27:06
在本例中使用Ruby的require_relative
:
require_relative "processor/mapper"
https://stackoverflow.com/questions/6671318
复制相似问题