Gemfile:为多个开发人员有条件地声明本地或远程gems的更好方法

ynk*_*nkr 6 bundler

我们小组有几个人,其中任何一个人可能正在处理任何宝石组合.目前,我们的Gemfile有这样的东西:

gem 'awesome-gem', :git => 'git@github.com:somebody/awesome-gem.git'
# gem 'awesome-gem', :path => '/Users/developer-A/workspace/awesome-gem'

# gem 'rad-gem', :git => 'git@github.com:somebody/rad-gem.git', :branch => 'release'
gem 'rad-gem', :path => '/some/path/specific-to/developer-B/rad-gem'
Run Code Online (Sandbox Code Playgroud)

因此开发人员A在本地工作的是awesome-gem,当他们完成时,他们只是替换了他们的:路径gem:git位置并且都承诺版本控制.developer-B和C对rad-gem执行相同的操作,每个都在其本地修改的Gemfile中有一个不同的路径,如果每个Gemfile都有真正的更改,他们必须撤消它们的本地:路径设置,提交,撤消以指回到他们当地版本的rad-gem等

这既痛又难,所以我试图想出一个更好的解决方案,但我能想出的最好的是这样的:

if ENV['RADGEM_PATH']
  gem 'rad-gem', :path => ENV['RADGEM_PATH']
else
  gem 'rad-gem', :git => 'git@github.com:somebody/rad-gem.git', :branch => 'release'
end
Run Code Online (Sandbox Code Playgroud)

这允许开发人员-B和C设置他们自己的rad-gem路径,同时消除上面提到的许多痛苦.然而,它仍然是丑陋的,我想知道是否有更好的方法来做到这一点,可能使用群组?

ynk*_*nkr 8

更新(当前)

最近对bunder的更新现在提供了本地git repos.这是解决这个问题的当前方法.谢谢sekrett

更新(过时)

如果你有Bundler> = 1.2,现在有更好的方法来做到这一点.例如,

bundle config local.blog ~/Work/gems/blog
Run Code Online (Sandbox Code Playgroud)

原始答案(过时)

我的一位朋友在rspec核心团队中向我展示了他们在rspec-core Gemfile中使用的方法,所以我想我会用它.