2015-01-06 11 views
8

http://guides.rubygems.org/make-your-own-gem/の手順を使用してRuby gemを構築しようとしています。以下はうまくいくように見え、* .gemファイルが生成されます。Ruby Gemを作成する - そのようなファイルをロードできない

gem build mygem.gemspec 

次のようにも(sudoで始まる場合のみ)成功するために表示されます。

sudo gem install mygem-0.0.1.gem 

私はIRBの内側require 'mygem'しようとするとしかし、私は次のエラーを取得する:

LoadError: cannot load such file -- mygem 

私はStackoverflowの周りに同様のエラーを見たことがありますが、私の特定の状況で何がうまくいかないのか理解できませんでした。私は問題なく他の宝石(鉱山ではない)を要求することができます。私の宝石はgem listの出力に現れますが、それは要求ではロードされません。

FWIW私はrbenvを使用しています。これは私にはまったく新しいものです。ここ

gem envの出力である:

  • RubyGemsのバージョン:2.4.5

    • RUBY VERSION:2.1.5(2014年11月13日パッチレベル273)[x86_64の-darwin14 0.0]

    • インストールディレクトリ:/Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1.0

    • RUBY EXECUTABLE:/Users/speersj/.rbenv/versions/2.1.5/bin/ruby

    • 実行ディレクトリ:/Users/speersj/.rbenv/versions/2.1.5/bin

    • SPECキャッシュディレクトリ:/Users/speersj/.gem/specs

    • システム設定ディレクトリ:/Users/speersj/.rbenv/versions/2.1.5/etc

    • RubyGemsのプラットフォーム:

    • ルビー

    • x86_64版 - ダーウィン - 14

    • GEMパス:

      • /Users/speersj/.rbenv/versions/2.1.5/lib/ruby/gems/2.1。 0

      • /Users/speersj/.gem/ruby/2.1。0

    • GEM設定:

      • :update_sources =>真

      • :冗長=>真

      • :バックトレース=> falseを

      • : bulk_threshold => 1000

    • リモートソース:

    • SHELL PATH:

      • /Users/speersj/.rbenv/versions/2.1.5/bin

      • /Users/speersj/.rbenv/libexec

      • /Users/speersj/.rbenv/plugins/ruby-build/bin

      • /Users/speersj/.rbenv/shims

      • /Users/speersj/.rbenv/bin

      • /Library/Frameworks/Python.framework/Versions/3。4 /ビン

      • は/ usr/local/binに

      • は/ usr/local/Herokuの/ binに

      • は/ usr/local/binにsbinに

      • は/ usr/local/

      • は/ usr/binに

      • /binに

      • は/ usr/sbinに

      • /

      • は/ usr/local/binに

      • は/ usr/local/smlnj/binに

sbinに

ジェンペック:

Gem::Specification.new do |spec| 
    spec.name  = 'mygem' 
    spec.version  = '0.0.1' 
    spec.date  = '2015-01-05' 
    spec.summary  = "mygem" 
    spec.description = "Attempting to build a gem" 
    spec.authors  = ["speersj"] 
    spec.email  = # my email here 
    spec.files  = ['lib/command.rb', 'lib/connection.rb'] 
    spec.homepage = '' 
    spec.license  = 'MIT' 
end 
+0

あなたの 'lib'ディレクトリの内容は何ですか?あなたの宝石には「mygem」という名前のファイルがありますか? – matt

+0

libには、クラスを定義するいくつかのファイルが含まれています。また、libの残りのファイルを必要とするmygem.rbファイルも含まれています。 – speersj

+0

'sudo'なしでgemをインストールしようとしますか? –

答えて

13

gemspecspec.filesにはmygem.rbファイルが含まれていないため、そのファイルは作成時に宝石に含まれません。このエントリにリストされているファイルのみが最終的な宝石に含まれます。

最も簡単な解決策は、単にアレイにmygem.rbを追加することです:

spec.files = ['lib/command.rb', 'lib/connection.rb', 'lib/mygem.rb'] 

これはかなり簡単な修正である、あなたはDir globを使用してのような、より柔軟な何かをしたいかもしれません:

spec.files = Dir['lib/**/*.rb'] 

実際には、Rubygems guide suggests you do something like this(テキストはそのセクションの最後です):

If you’ve added more files to your gem, make sure to remember to add them to your gemspec’s files array before publishing a new gem! For this reason (among others), many developers automate this with Hoe , Jeweler , Rake , Bundler , or just a dynamic gemspec .


また、実際にpermissions problemを修正する必要がある場合は、自分のホームディレクトリに宝石をインストールするのにsudoは必要ありません。

+0

ありがとう、私は完全に最も明白なファイルを追加することを忘れました!今からDir glob。正しい方向に私を向けるのを助けてくれてありがとうre:sudoを使う必要があるのは私には似ていませんでした。 – speersj

2

rbenv(またはRVM)を使用しているときは宝石をインストールすることはできませんが、「マルチユーザー」または「システム全体」タイプのインストールは特化されており、ユーザーは使用する必要があります。

sudoはルートにあなたの特権をエスカレートし、ルートは、ユーザーのrbenv環境にルビーの知識を持ちません。その結果、rootはデフォルトのシステムRubyを使用し、そこにファイルをインストールします。

代わりに、正しいことを行うであろう、基本gem installを使用しています。

0

は前に、あなたの宝石を構築し、ビルド宝石をインストールするには、GitHubのレポに変更されたすべてのファイルを追加したことを確認してください。

関連する問題