Gemfile gem安装和gemspec依赖项

时间:2013-04-09 14:45:48

标签: ruby-on-rails ruby gem gemfile

我有一个应用程序,其Gemfile需要一个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"

当我在app中运行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吗?

2 个答案:

答案 0 :(得分:3)

这就是它的方式 - 宝石中的Gemfile依赖性仅适用于您开发宝石的时候。只有在其他地方使用gem时才会评估gemspec(并且gemspecs没有git依赖关系的概念),因此只适用于gemspec中的依赖项。

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

答案 1 :(得分:2)

gem specification中所述,您通过add_dependency提供的宝石列表将用于确保在安装过程中已经安装了这些宝石(即gem安装)。所以这一行:

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

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

这一行(你的宝石内部):

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

指定gem应该来自git存储库,其根目录是.gemspec。

有关详情:Gems from git repositories