0

gemファイルの作り方を学んでいます。

を使用してbundle gem foo、「hello world」gem を作成しました。実行ファイル名を指定すると正常に動作します。

Gem::Specification.new do |spec|
  spec.executables   = "foo"
end

しかし、デフォルトGem::Specification.executablesではこのように設定されています。

Gem::Specification.new do |spec|
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
end

binこのメソッドは、ディレクトリの下のすべてのファイルを見つけると思いました。しかし、私の環境ではうまくいきません。

gemを作るたびに書き直すのはたいしたことではない。しかし、なぜこれがうまくいかないのかを明確にしたいと思います。

私の環境は次のとおりです。rbenvを使用したruby 2.0.0-p247、バンドル1.3.5、gem 2.0.3、Ubuntu 12.04。

4

2 に答える 2

2

重要な行は、spec.executables のすぐ上にあります。

 spec.files         = `git ls-files -z`.split("\x0")

Git はファイルの一覧表示に使用されています。bin/ の追加をコミットしていない場合、ファイル一覧は変更されていないため、実行可能ファイルはビルドおよび追加されません。

于 2014-07-10T03:21:46.673 に答える