【问题标题】:How do I require a Ruby file?我如何需要一个 Ruby 文件?
【发布时间】:2013-03-16 20:10:49
【问题描述】:

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

【问题讨论】:

标签: ruby


【解决方案1】:

使用require_relative 声明

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

require_relative './turboname'

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

【讨论】:

    【解决方案2】:

    该错误并未告诉您它找不到./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/
    

    【讨论】:

      【解决方案3】:

      使用 Ruby 2.0:

      require "#{__dir__}/turboname"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 2014-03-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        相关资源
        最近更新 更多