首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >理解Ruby的加载路径

理解Ruby的加载路径
EN

Stack Overflow用户
提问于 2011-07-13 05:22:59
回答 3查看 64.7K关注 0票数 59

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

代码语言:javascript
复制
processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb

我的processor.rb文件看起来像这样

代码语言:javascript
复制
require 'processor/mapper'
require 'processor/reducer'

class Processor

end

仅仅为了测试它,文件映射器看起来就像:

代码语言:javascript
复制
class Mapper
  def run
    puts "running map"
  end
end

但是运行ruby lib/processor.rb会导致:

代码语言:javascript
复制
<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>'    
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-13 05:51:31

默认情况下,Ruby的$LOAD_PATH不会包含您的lib目录(即使您正在运行的文件位于该目录中)。

您可以告诉ruby解释器将其包括在内:

代码语言:javascript
复制
ruby -Ilib lib/processor.rb

或者,您可以将lib文件夹添加到加载路径:

代码语言:javascript
复制
$LOAD_PATH.unshift(File.dirname(__FILE__))
require  'processor/mapper'
...
票数 78
EN

Stack Overflow用户

发布于 2011-07-13 05:47:36

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

您始终可以通过检查$LOAD_PATH (或$:)来确定当前加载路径

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

票数 34
EN

Stack Overflow用户

发布于 2016-09-06 23:27:06

在本例中使用Ruby的require_relative

代码语言:javascript
复制
require_relative "processor/mapper"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6671318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档