3

我有一个应用程序,其 Gemfile 需要一个 gem,该 gem 还依赖于当前在 github 上找到的另一个 gem。

所以 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;但是,如果我将以下行 gem "my-gem-2", :git => "git@github.com:MyCompany/my-gem-2.git" 放在app/Gemfile 中,那么它可以正常工作。

这种做法似乎是多余的,因为我认为我不必将另一个 gem 的 gem 依赖项添加到我的父应用程序中。我在这里做错了什么myapp找不到my-gem-2吗?

4

2 回答 2

4

这就是它的方式 - gems 中的 Gemfile 依赖项仅适用于您开发该 gem 时。当 gem 在其他地方使用时,只有 gemspec 被评估(并且 gemspecs 没有 git 依赖项的概念),因此只有 gemspec 中的依赖项适用。

所以:你需要在你的应用程序的 Gemfile 中有两个 git 引用。

于 2013-04-09T15:02:23.200 回答
2

正如gem 规范中所述,您提供的gem 列表add_dependency将用于确保在安装过程(即gem install)期间这些gem 已经安装在系统中。所以这一行:

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

将触发系统中是否安装 gem 的验证,但不会像 Bundler 那样触发此类 gem 的任何自动安装。

另一行(在您的 gem 内):

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

指定一个 gem 应该来自一个 .gemspec 在其根目录下的 git 存储库。

有关更多详细信息:来自 git 存储库的 Gems

于 2013-04-09T15:02:54.540 回答