Ruby不需要查找所有文件

时间:2013-05-09 17:42:59

标签: ruby gem

我做了一些研究,没有什么能解决我的问题...

我正在构建一个gem,所以我有一个像这样的目录结构

root/ - lib/ - mygem/   - cli.rb
                        - version.rb
                        - xmltemplates.rb
             - mygem.rb
      - bin/

这是一个thor个应用,所以cli.rb我有:

require 'thor'
require 'mygem/version'
require 'mygem/xmltemplates'

module MyGem
    #STUFF
end

vesrion.rb

module MyGem
    VERSION = '0.1.0'
end

xmltemplates.rb

module MyGem
    MY_TEMPLATE = 'TEST'
end

我在尝试使用gem编译时遇到错误,所以我决定在irb中使用它。

因此,对于这个测试,我做了cd lib使自己成为lib目录的本地。

1.9.3-p392 :001 > require 'rubygems'
 => false
1.9.3-p392 :003 > require 'mygem'
 => true
1.9.3-p392 :005 > require 'mygem/cli'
LoadError: cannot load such file -- mygem/xmltemplates
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/user/.rvm/gems/ruby-1.9.3-p392/gems/mygem-0.1.0/lib/mygem/cli.rb:3:in `<top (required)>'
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from (irb):5
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'
1.9.3-p392 :007 > require 'mygem/xmltemplates'
LoadError: cannot load such file -- mygem/xmltemplates
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from (irb):7
    from /Users/user/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'
1.9.3-p392 :009 > require 'mygem/version'
 => true
1.9.3-p392 :010 > MyGem::VERSION
 => "0.1.0"

因此可归结为:mygem/version是否会加载查找,而mygem.xmltemplates不会?我已经检查了文件的权限,它们都是完全相同的。

我之前阅读过的一些帖子提到require_relative,但这对我不起作用,似乎就是这样我就无法加载cli.rb或{ {1}}。

1 个答案:

答案 0 :(得分:0)

使用宝石时,您的.gemspec文件是最新的非常重要。 gem loader使用它来查找文件。也许您还没有将xmltemplates添加到该规范中?

如果您正在尝试诊断加载问题,请务必检查$LOAD_PATH以确保您的lib/在那里。如果不是,则由于缺少文件,您将获得LoadError类型例外。