LoadError: 无法加载此类文件 -- 目录/文件名
Posted
技术标签:
【中文标题】LoadError: 无法加载此类文件 -- 目录/文件名【英文标题】:LoadError: cannot load such file -- directory/file_name 【发布时间】:2013-03-29 03:08:55 【问题描述】:我有一个类似的文件结构
root
|--lib
|--root.rb
|--extensions
|--strings.rb
我希望能够在root.rb
文件中使用string.rb
中的方法。
所以我在root.rb
文件的顶部添加了require 'extensions/strings'
。
但我收到LoadError: cannot load such file -- extensions/strings.rb
错误。
如何避免这种情况?
【问题讨论】:
require 'lib/extensions/string'
仍然收到LoadError: cannot load such file -- lib/extensions/strings
【参考方案1】:
I found the answer I am looking for here.
我使用了jandot的解决方案。
Dir[File.dirname(__FILE__) + '/extensions/*.rb'].each |file| require file
经过一些测试后编辑,
由于某种原因,这不会引发任何错误消息,但似乎并未加载实际的 Ruby 文件。
我尝试将其添加到 extensions/strings.rb
class Dog
def self.bark
puts "bark"
end
end
然后在 irb 上运行它。
1.9.3-p0 :001 > require 'rhapsody'
=> true
1.9.3-p0 :002 > Dog
NameError: uninitialized constant Dog
from (irb):2
from /Users/jasonkim/.rvm/rubies/ruby-1.9.3-p0/bin/irb:16:in `<main>'
所以由于某种原因,它没有在 extensions/strings.rb 中找到 Dog 类。
阅读 rubygems.org 中的 guid 后进行编辑
当我开始 irb 时,我必须去irb -Ilib -rextensions
指南这样解释情况
我们需要在这里使用一个奇怪的命令行标志:-Ilib。通常 RubyGems 会为您包含 lib 目录,因此最终用户无需担心配置其加载路径。但是,如果您在 RubyGems 之外运行代码,则必须自己进行配置。
【讨论】:
【参考方案2】:您可以尝试以下方法:
require File.dirname(__FILE__) + "/extensions/strings"
【讨论】:
得到这个。LoadError: cannot load such file -- /Users/jasonkim/.rvm/gems/ruby-1.9.3-p0/gems/rhapsody-0.0.1/lib/extensions/strings
【参考方案3】:
如果您使用的是 Ruby 1.9 或更高版本,请使用 require_relative。在root.rb中,写:
require_relative 'extensions/strings.rb'
【讨论】:
得到这个。LoadError: cannot load such file -- /Users/jasonkim/.rvm/gems/ruby-1.9.3-p0/gems/rhapsody-0.0.1/lib/extensions/strings.rb
require_relative 绝对有效,所以如果它不适合您,那么我需要更多信息。你把声明放在什么文件里?该文件的完整路径是什么? strings.rb 的完整路径是什么?一旦你开始提出正确的问题,这些东西就不难弄清楚了。
谢谢。所有的答案都是正确的。我忘记提到的细节是我试图将文件加载为 gem。【参考方案4】:
require_relative '../lib/extensions/strings'
为我工作。
【讨论】:
以上是关于LoadError: 无法加载此类文件 -- 目录/文件名的主要内容,如果未能解决你的问题,请参考以下文章
无法加载此类文件 -- openssl (LoadError)
rails 无法加载此类文件 -- rake (LoadError)