了解Ruby的加载path

我有点困惑,为什么我的项目无法加载所需的文件,这是一个非常简单的项目树:

processor/ bin/ lib/ processor.rb processor/ mapper.rb reducer.rb 

和我的processor.rb文件看起来像

 require 'processor/mapper' require 'processor/reducer' class Processor end 

而只是为了testing它的文件映射器看起来像:

 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>' 

Ruby的$LOAD_PATH在默认情况下不会包含你的lib目录(即使这是你正在运行的文件所在的位置)。

你可以告诉ruby解释器包含它:

 ruby -Ilib lib/processor.rb 

或者你可以添加lib文件夹到加载path:

 $LOAD_PATH.unshift(File.dirname(__FILE__)) require 'processor/mapper' ... 

Ruby 1.9不再包含“。” 在加载path中。 require "#{File.dirname(__FILE__)}/processor/mapper"或使用require_relative

您可以通过检查$LOAD_PATH (或$: $LOAD_PATH来确定当前的加载path

(编辑:$ LOAD_PATH不是$:LOAD_PATH)

在这种情况下使用Ruby的require_relative

 require_relative "processor/mapper"