Ruby`requiret':无法加载这样的文件(LoadError)

时间:2016-09-28 12:11:13

标签: ruby

我有一个如下所示的目录结构:

 - lib
   - yp-crawler (directory)
      - file-a.rb
      - file-b.rb
      - file-c.rb
   - yp-crawler.rb

我的lib/yp-crawler.rb文件如下所示:

require "yp-crawler/file-c"
require "yp-crawler/file-b"
require "yp-crawler/file-a"

module YPCrawler
end

当我尝试在命令行运行我的文件时:

ruby lib/yp-crawler.rb

我收到此错误:

`require': cannot load such file -- yp-crawler/file-c (LoadError)
    from .rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from lib/yp-crawler.rb:1:in `<main>'

导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:3)

根据API Dock,您需要require_relative

  

Ruby尝试加载名为string的库相对于require   文件的路径。如果无法确定文件的路径,则为LoadError   提高。如果加载文件,则返回true,否则返回false。

所以你要做的就是

require_relative "file-a"
require_relative "file-b"
require_relative "file-c"

答案 1 :(得分:3)

您可以做的另一件事是将目录添加到$LOAD_PATH(这是大多数宝石需要文件的方式)。
当您致电$LOAD_PATH时,$:(又名require)就是ruby查找文件的地方。

所以你可以试试这段代码

# lib/yp-crawler.rb

$LOAD_PATH.unshift File.expand_path('..', __FILE__)
# it can be $LOAD_PATH.push also

require "yp-crawler/file-c"
require "yp-crawler/file-b"
require "yp-crawler/file-a"

module YPCrawler
end

P.S。 例如,您可以see回形针如何做同样的事情。