2013-05-09 53 views
1

我做了一些研究,并没有对我的问题很打...Ruby的要求没有找到的所有文件

我建立一个宝石,所以我有这样的

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 

试图与作为宝石,所以我决定在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.rbversion.rb

回答

0

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

如果你试图诊断负载问题,经常检查$LOAD_PATH,以确保您的lib/就在那里。如果不是,由于丢失文件,您将得到LoadError类型的异常。

+1

我gemspec显示: 's.require_paths = [ 'LIB']' 你是在给它虽然! 刚刚意识到我也有这个:'s.files ='git ls-files'.split(“\ n”)''。这是一份复制粘贴工作,所以我不认为要改变它。我想我必须'git add'才能工作。感谢您的正确方向! – IamTheFij 2013-05-09 18:51:55

+0

就是这样。如果清单中没有列出某些内容,则不会捆绑安装。 – tadman 2013-05-09 19:23:27