2013-01-22 219 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),然後再檢查你的答案。現在它正在工作。我在這個問題上掙扎了好幾個小時。我沒有檢查過的教程沒有指定這個問題。非常感謝你。 –