我有一个如下所示的目录结构:
- 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>'
导致这种情况的原因是什么?
答案 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回形针如何做同样的事情。