3

現在 github で見つかっている別の gem にも依存する gemfile を必要とするアプリがあります。

したがって、 app/Gemfile は読み取ります gem "my-gem", :git => "git://github.com/MyCompany/my-gem.git"

my-gem/Gemfile読み取り gem "my-gem-2", :git => "git@github.com:MyCompany/my-gem-2.git"

my-gem/my-gem.gemspec読み取り spec.add_dependency "my-gem-2"

アプリ内で bundle を実行すると、my-gem に必要な gem my-gem-2 が見つからないというエラーが表示されます。ただし、次の行 をapp/Gemfilegem "my-gem-2", :git => "git@github.com:MyCompany/my-gem-2.git" 内に配置すると、正常に動作します。

親アプリに別の宝石の依存関係を追加する必要はないと思うので、この方法は冗長に思えます。myapp が my-gem-2 を見つけられないという、ここで間違っていることはありますか?

4

2 に答える 2

4

これはまさにその通りです。gem 内の Gemfile 依存関係は、その gem を開発するときだけのものです。gem が他の場所で使用される場合 (gemspec には git 依存関係の概念がない)、gemspec のみが評価されるため、gemspec の依存関係のみが適用されます。

したがって、アプリの Gemfile 内に両方の git 参照が必要になります。

于 2013-04-09T15:02:23.200 に答える
2

gem の仕様に記載されているように、提供する gem のリストはadd_dependency、インストール プロセス (つまり、gem install) 中にそれらがシステムに既にインストールされていることを確認するために使用されます。したがって、この行:

my-gem/my-gem.gemspec reads spec.add_dependency "my-gem-2"

gem がシステムにインストールされているかどうかの検証をトリガーしますが、Bundler が行うように、そのような gem の自動インストールをトリガーしません。

この他の行(宝石の内部):

gem "my-gem-2", :git => "git@github.com:MyCompany/my-gem-2.git"

ルートに .gemspec を持つ git リポジトリから gem を取得する必要があることを指定します。

詳細: Git リポジトリの Gem

于 2013-04-09T15:02:54.540 に答える