LoadError:无法加载此类文件 - directory / file_name

时间:2013-04-06 19:49:23

标签: ruby

我有一个像

这样的文件结构
root
|--lib
   |--root.rb
   |--extensions
      |--strings.rb

我希望能够在string.rb文件中使用root.rb中的方法。

所以我在require 'extensions/strings'文件的顶部添加了root.rb

但我收到LoadError: cannot load such file -- extensions/strings.rb错误。

我该如何避免这种情况?

4 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

require File.dirname(__FILE__) + "/extensions/strings"

答案 1 :(得分:2)

如果您使用的是Ruby 1.9或更高版本,请使用require_relative。在root.rb中,写:

require_relative 'extensions/strings.rb'

答案 2 :(得分: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之外运行代码,则必须自己配置。

答案 3 :(得分:0)

require_relative '../lib/extensions/strings'

适合我。