2011-10-18 3 views
18

私が書いた特製の宝石を構築しようとしていますが、これはclient_packageと呼ばれています。Gemを取得しようとしています:: InvalidSpecificationException: "[...]はファイルではありません"

client_package 
    Gemfile 
    Gemfile.lock 
    client_package.gemspec 
    Rakefile 
    Readme.md 
    .gitignore 
    .git 
     ...git files... 
    lib 
     client_package.rb 
     client_package 
      version.rb 
      api.rb 
      ...more... 

そして、私のclient_package.gemspecは、次のようになります:

私のディレクトリ構造は次のようになります

# encoding: UTF-8 
require File.expand_path('../lib/client_package/version', __FILE__) 

Gem::Specification.new do |s| 
    s.name = 'client_package' 
    s.version = ClientPackage::VERSION 
    s.platform = Gem::Platform::RUBY 

    s.files = `git ls-files`.split('\n') 
    s.executables = `git ls-files -- bin/*`.split('\n').map{ |f| File.basename(f) } 
    s.require_paths = ['lib'] 

    # also have s.authors, s.email, s.homepage, s.summary, s.description 

    s.add_dependency 'httparty' 
    s.add_dependency 'json' 
end 

そして、すべての私のファイルがコミットされ、gitの状態はきれいです。

トップclient_packageディレクトリ内から、私はgem build client_package.gemspecを実行すると、このエラーが表示されます。それらは確かに私には、ファイルのように見えるので、

ERROR: While executing gem ... (Gem::InvalidSpecificationException) 
    [".gitignore 
Gemfile 
Rakefile 
Readme.md 
client_package.gemspec 
lib/client_package.rb 
lib/client_package/api.rb 
lib/client_package/version.rb 
lib/client_package/...more... 
"] are not files 

これは、私には不可解です。とにかく、私は、これらのファイルを見ていない場合、いくつかのパスの問題があると思って、ちょうどいくつかの試行錯誤をして、私はディレクトリ(上のレベルclient_package)の上に移動してgem build client_package/client_package.gemspecを実行すると最初に作業し、ファイルclient_package-1.0.0.gemを作成します。しかし何かはまだ間違っています。私はgem install client_package-1.0.0.gemと一緒にその宝石をインストールしても動作するようです。しかし、これは:

require 'rubygems' 
require 'client_package' 

戻り値LoadError: no such file to load -- client_packageです。

小さいながらも重要なものを逃してしまわなければならないような気がします。何か案は?

答えて

12

This'dは小さいが重要である:

split('\n')split("\n")べきか?

[".gitignore 
Gemfile 
Rakefile 
Readme.md 
client_package.gemspec 
lib/client_package.rb 
lib/client_package/api.rb 
lib/client_package/version.rb 
lib/client_package/...more... 
"] 

は、単一の複数行の文字列ではなく、複数の文字列の配列を含む配列することができように見えますので。

+1

私はばかです。ありがとう! –

+3

私と私の中毒は一重引用符=)です。 –

32

gitをチェックインしなかった場合、古い(削除された)ファイルが干渉する可能性があります:ディスク上に存在しないがgit ls-files mighとして報告する宝石に含まれています。

ファイルをチェックインしてください。このエラーは終了しました。

+0

これはまさに私たちの問題でした。ありがとうございました! – snowe

+6

乾杯!@HugoLogmans!私は 'git rm 'を実行すると(例えば、ファイルの削除を行った)、この問題を引き起こしていたファイルを削除しました。その後、私は大丈夫でした - 実際にコミットする必要はありませんでした。この場合、 – eebbesen

+2

をコミットしたくない場合でも、単にgit addを実行すれば、gemコマンドは削除されたファイルを無視します。 – Swaps

関連する問題