理解Ruby';s加载路径
我有点困惑为什么我的项目不能加载它需要的文件,它是一个非常简单的项目树:理解Ruby';s加载路径,ruby,Ruby,我有点困惑为什么我的项目不能加载它需要的文件,它是一个非常简单的项目树: processor/ bin/ lib/ processor.rb processor/ mapper.rb reducer.rb 我的processor.rb文件如下所示 require 'processor/mapper' require 'processor/reducer' class Processor end 为了进行测试,文件映射器如下所示: class
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>'
:29:in'require':没有这样的文件要加载——处理器/映射器(LoadError)
from:29:in'require'
从lib/processor.rb:3:in`'
从lib/processor.rb:2:in`'
Ruby 1.9不再在加载路径中包含“.”。是否require“{File.dirname(\uu File\uuu)}/processor/mapper”
或使用require\u relative
您始终可以通过检查$load\u path
(或$:
)来确定当前加载路径
(编辑:$LOAD\U PATH not$:LOAD\U PATH)Ruby的
$LOAD\U PATH
默认情况下将不包括您的lib
目录(即使您正在运行的文件位于该目录)
您可以告诉ruby
解释器包含它:
ruby -Ilib lib/processor.rb
或者,您可以将lib
文件夹添加到加载路径:
$LOAD_PATH.unshift(File.dirname(__FILE__))
require 'processor/mapper'
...
在这种情况下,使用Ruby的
require\u relative
:
require_relative "processor/mapper"
他的确切场景实际上在1.8中也不起作用(从根
processor
文件夹运行ruby lib/processor.rb
)。但是,在lib
文件夹中运行ruby processor.rb
将适用于1.8,但不适用于1.9。“ruby”有一个撇号,因为您指示的是属于它的加载路径,而不是有多个ruby。