了解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"