如何在Bundler中使用"gemspec"规则,同时仍然使用gem的本地签出?

agn*_*ter 19 ruby gem rubygems bundler

场景:我正在gem-foo使用Bundler 开发一个gem .我有一个依赖gem-bar,我已经在本地检查开发.我可以在Gemfileas中声明这个依赖:

gem "gem-bar", :path => "/path/to/local/gem-bar"
Run Code Online (Sandbox Code Playgroud)

然而,在开发宝石时,"最佳实践"似乎是在gem-foo.gemspec通道中定义所需的宝石:

s.add_runtime_dependency 'gem-bar'
Run Code Online (Sandbox Code Playgroud)

然后简单地在Gemfile使用中包含依赖项:

gemspec
Run Code Online (Sandbox Code Playgroud)

我想要做的是在gemspec中添加对gem的运行时依赖性,但是对其进行一些本地修改gem-barbundle install使用本地开发结帐.假设我控制两个宝石的情况,并且我在某种程度上同时攻击它们,我将同时推动新版本.我可能只是注释掉s.add_runtime_dependency在gemspec并与在Gemfile中的本地路径添加它,但那种感觉......容易出错?gemspec 应该总是声明这个依赖项,并且Gemfile应该能够覆盖Bundler应该用于gem的位置.但是,如果您实际执行此操作,则会收到以下错误:

您不能指定来自不同来源的相同gem两次.您指定gem-bar(> = 0)应来自未指定的源和/ path/to/local/gem-bar的源

理想情况下,我只是有一些本地覆盖,因为我从来不想要我不小心推动宝石需要gem-bar在特定路径上的本地.那会很愚蠢.

有没有人对这个用例有一个很好的解决方案?

gun*_*unn 15

有几个人发现了这个问题,Yehuda Katz说他很乐意接受一个补丁:http://groups.google.com/group/ruby-bundler/browse_thread/thread/d4215c4930a63ffc?pli = 1

作为最好的解决方法,在gemfile中注释掉gemspec行并遭受一些重复?

更新:

看起来你不必等待 - https://github.com/carlhuda/bundler/commit/03378109d

提交消息:"可以在Gemfile中覆盖.gemspec依赖项的源"

万岁!