我有点困惑为什么我的项目不能加载它需要的文件,它是一个非常简单的项目树:

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

推荐答案

默认情况下,Ruby's $LOAD_PATH将不包括lib目录(即使您正在运行的文件位于lib目录).

您可以告诉ruby口译员将其包括在内:

ruby -Ilib lib/processor.rb

也可以将lib文件夹添加到加载路径:

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

Ruby相关问答推荐

安全导航运算符的使用是否应该在两种情况下进行单元测试(对象存在 + 对象无)?

使用数组作为其中之一转换键和值

判断数组中的字符串是否包含另一个数组中的子字符串

Ruby 和用正则表达式分割字符串

创建线程安全的临时文件名

Symfony 2assets资源过滤器异常中的指南针

在 Ruby 中导出环境变量

为什么 ruby​​ 在 Windows 上这么慢?

Ruby 中的排序稳定吗?

在 Selenium WebDriver 中按 Ctrl + A

如何获取符号链接的目标?

Ruby 1.9:如何正确大写和小写多字节字符串?

如何在不使用循环的情况下按数组中的计数分组

创建一个接受参数散列的 ruby​​ 方法

如何在 Ruby 中重命名文件?

通过 factory_girl 协会查找或创建记录

Ruby 中的动态方法调用

为什么compass watch说它无法加载 sass/script/node (LoadError)?

Ruby中的字符串和符号有什么区别?

Ruby Activerecord IN 子句