Gem和bundler:使用相对路径添加开发依赖项

时间:2011-06-12 02:32:34

标签: ruby rubygems bundler

我正在帮助开发一系列相互关联的宝石。因此,我不希望它们彼此之间存在硬依赖关系,但我希望它们在开发中运行彼此使用的测试。简单吧?只需在gemspec中使用add_development_dependency,对吧?好吧,有一点点皱纹 - git存储库包含所有的gem,所以我希望Gemfile指向gem的本地副本。这与硬依赖有关。在gemspec中,我有这条线用于我的硬依赖:

s.add_dependency "mygem-core"

然后在Gemfile中,我有这一行:

gem "mygem-core", :path => "../mygem-core"

这完美无缺。当我推出这个包时,存在依赖性,当我测试时,它将使用mygem-core的本地副本。问题是当我把它放在gemspec中时:

s.add_development_dependency "mygem-runtime"

然后在Gemfile中:

gem "mygem-runtime", :path => "../mygem-runtime"

然后当我运行bundle时出现错误:

You cannot specify the same gem twice coming from different sources. You specified that mygem-packager (>= 0) should come from source at ../mygem-packager and 

是的,这不是最后的错字。第二个“位置”的末端实际上有一个空白的空白空间。有没有聪明的方法可以解决这个问题?我想将此添加为开发依赖项,并使用本地源。我错过了什么?

2 个答案:

答案 0 :(得分:9)

将gem留在 .gemspec 清单中并将其放在:development 组下的 Gemfile 中可能会更好。

# Gemfile
source :rubygems
gemspec

gem "mygem-runtime", :path => '../mygem-runtime', :group => :development

答案 1 :(得分:1)

如果您使用Gemfile来指定gem的本地路径,则需要将其从gemspec中删除。 Bundler将解析gemspec并添加bundler正在安装的依赖项,因此它就像指定了两次gem一样。