1

我有一个名为“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
4

3 回答 3

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/
于 2013-03-16T21:11:47.277 回答
3

使用require_relative语句

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

require_relative './turboname'

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

于 2013-03-16T20:56:31.297 回答
1

使用 Ruby 2.0:

require "#{__dir__}/turboname"
于 2013-03-16T20:26:30.073 回答