2

ruby を学んでいて、gem ファイルの作成方法をテストしたかったのです。私のマシンには以下がインストールされています。ruby 1.9.3p362 (2012-12-25 リビジョン 38607) [x86_64-linux] Bundler バージョン 1.2.3 rake、バージョン 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 > 

この問題を解決する方法が見つかりません。ここで私が間違っていることを誰かが教えてくれれば、とても助かります。

前もって感謝します。

4

1 に答える 1

4

.gemspec作成者bundle gemGitを使用して、gemに含めるファイルを決定します。次の行が含まれています:

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

追加するには、Gitリポジトリに追加hello_gem/base.rbする必要があります。元のセットアップが機能するので、Gitがインストールされていると思います。したがって、実行する必要があるのは次のとおりです。

git add lib/hello_gem/base.rb

git ls-filesファイルを取得してgemに追加するために実際にファイルをコミットする必要はないので、これで十分に機能するはずです。

于 2013-01-22T05:57:11.453 に答える