1

我已经做了一些研究,但对我的问题没有任何影响......

我正在构建一个 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会加载 find 而mygem.xmltemplates不会?我也检查了文件的权限,它们都是相同的。

我读过的一些以前的帖子提到过require_relative,但这对我不起作用,如果是这样的话,我似乎无法加载cli.rbversion.rb.

4

1 回答 1

0

使用 gems 时,确保您的.gemspec文件是最新的很重要。gem 加载器使用它来查找文件。也许您还没有添加xmltemplates到该规范中?

如果您尝试诊断加载问题,请始终检查$LOAD_PATH以确保您lib/的问题在那里。如果不是,您将LoadError因缺少文件而出现类型异常。

于 2013-05-09T17:46:05.020 回答