2013-01-22 40 views
2

我正在学习ruby,我想测试如何创建gem文件。我在我的机器中安装了以下内容。 红宝石1.9.3p362(2012-12-25的修订38607)[x86_64的Linux的] 捆扎机版本1.2.3 耙,版本10.0.3创建红宝石

我创建使用bundle gem hello_gem宝石。我将以下示例代码添加到hello_gem.rb

module HelloGem 
    class Base 
    def self.hello 
     puts "Hello Ruby Gem #{HelloGem::VERSION}" 
    end 
    end 
end 

我的文件夹结构如下所示。

├── Gemfile 
├── Gemfile.lock 
├── hello_gem.gemspec 
├── lib 
│   ├── hello_gem 
│   │   └── version.rb 
│   └── hello_gem.rb 
├── LICENSE.txt 
├── Rakefile 
├── README.md 

然后我使用rake install创建了宝石。然后我开始irb,我可以执行以下操作。

1.9.3-p362 :001 > require 'hello_gem' 
=> true 
1.9.3-p362 :002 > HelloGem::Base.hello 
Hello Ruby Gem 0.0.1 
=> nil 
1.9.3-p362 :003 > 

问题出现在我想将代码移动到lib文件夹中。我创建了lib/hello_gem/base.rb并在其中添加了上述代码。而在hello_gem.rb我刚使用require "hello_gem/base"。现在我的项目如下所示。

├── Gemfile 
├── Gemfile.lock 
├── hello_gem.gemspec 
├── lib 
│   ├── hello_gem 
│   │   ├── base.rb 
│   │   └── version.rb 
│   └── hello_gem.rb 
├── LICENSE.txt 
├── Rakefile 
├── README.md 

当我建立使用rake install和使用irb测试下面的错误发生的宝石。

1.9.3-p362 :001 > require 'hello_gem' 
LoadError: cannot load such file -- hello_gem/base 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
from /home/sandarenu/.rvm/gems/ruby-1.9.3-p362/gems/hello_gem-0.0.1/lib/hello_gem.rb:2:in `<top (required)>' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require' 
from (irb):1 
from /home/sandarenu/.rvm/rubies/ruby-1.9.3-p362/bin/irb:16:in `<main>' 
1.9.3-p362 :002 > 

我无法找到解决此问题的方法。如果有人能告诉我我在这里做错了什么,这将是一个很大的帮助。

在此先感谢。

+0

无法复制:http://pastie.org/5805403。你确定你打开了一个新的IRB进行测试吗? –

回答

4

bundle gem创建的.gemspec使用Git来确定哪些文件包含在gem中;它包含行:

gem.files   = `git ls-files`.split($/) 

为了它,加入你hello_gem/base.rb你需要把它添加到Git仓库。由于原来的设置适用于你,我想你已经安装了Git的,所以你只需要运行:

git add lib/hello_gem/base.rb 

你实际上并不需要提交的文件git ls-files把它捡起来,并把它添加到创业板上市,所以这应该足以让它起作用。

+0

啊,我现在记得。前段时间有我自己的宝石出现这个问题。 :) –

+1

OMG!...它真的工作:)。我刚刚发布了示例代码到[github](https://github.com/sandarenu/hello_gem),然后再检查你的答案。现在它正在工作。我在这个问题上挣扎了好几个小时。我没有检查过的教程没有指定这个问题。非常感谢你。 –