宝石を構築しようとすると、宝石を取得しようとする:: nivalidSpecificiationException:「[…]はファイルではありません」
質問
私が書いたカスタムジェムを作成しようとしています client_package
しかし、それは失敗しています。
私のディレクトリ構造は次のようになります:
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
.
私は小さなものが重要だが重要なものを見逃しているに違いないと感じています。何か案は?
解決
これは小さいですが重要です:
したほうがいい 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...
"]
複数の文字列の配列ではなく、単一のマルチライン文字列を含む配列である可能性があります。
他のヒント
この古いスレッドを復活させるための言い訳は、別の原因を見つけました:Gitをチェックしなかった場合、いくつかの古い(削除されたファイル)が干渉する可能性があります:ディスクには存在しませんが、Git ls-filesはそれらに含まれていると報告しています。宝石。
ファイルを確認すると、この正確なエラーは終了します。