我如何需要Ruby文件?

时间:2013-03-16 20:10:49

标签: ruby

我有一个名为“go.rb”的文件,其中包含:

require 'turboname'
dictionary = Turboname::Random.new

100999032982389.times do
  name = Turboname::Domain.new(:from => dictionary)
  name.save if name.length < 15 and name.available?
  tld = name.tldize
  name.save(tld) if tld and name.length < 15 and name.available?(tld)
end

turboname.rb与go.rb位于同一目录中。这是同一水平。我只想在此脚本中包含此文件。我不想处理宝石或捆绑。

./turboname.rb:1:in `require': no such file to load -- turboname/version (LoadError)
    from ./turboname.rb:1
    from go.rb:1:in `require'
    from go.rb:1

3 个答案:

答案 0 :(得分:3)

使用require_relative声明

最近的Ruby版本不再将.添加到$:中存储的加载路径中。但是,一种解决方案是使用Kernel#require_relative来要求相对于当前值__FILE__的文件。例如:

require_relative './turboname'

请注意,这在使用irb或pry的交互式REPL会话中不起作用,但在实际源文件中工作正常。

答案 1 :(得分:3)

错误并未告诉您找不到./turboname.rb。它告诉你它发现了这个文件,但./turboname.rb的第一行尝试require 'turboname/version',Ruby无法找到。 ./turboname/version.rb是否存在?如果是这样,当前用户可以读取吗?

如果其他所有内容都检出,那么您就遇到了加载路径问题。在go.rb的顶部,显式添加当前工作目录(或包含turboname.rbturboname/version.rb的任何目录(可能是./lib/)到您的加载路径:

$LOAD_PATH << File.dirname(__FILE__) # for ./
# or
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib') # for ./lib/

答案 2 :(得分:1)

使用Ruby 2.0:

require "#{__dir__}/turboname"