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

时间:2012-02-20 23:12:35

标签: 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'

所以developer-A正在本地开发awesome-gem,当他们完成时,他们只是将他们的:path替换为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

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

2 个答案:

答案 0 :(得分:8)

更新(当前)

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

更新(过期)

如果你有Bundler> = 1.2,那么现在有一个better way to do this。例如,

bundle config local.blog ~/Work/gems/blog

原始答案(过时)

我的一位朋友在rspec核心团队中向我展示了the approach they used in the rspec-core Gemfile,所以我想我会用它。

答案 1 :(得分:0)

难道你也没有动态Gemfile在开发中使用隐藏文件(.my_local_gems)来获取该用户机器上宝石的位置吗?或者您甚至可以为GEMS_DEVEL_HOME这样的变量使用一些环境变量?

无论哪种方式,它都会强制每个人保持所有本地宝石的最新状态,并且在生产或登台时,正常的Gemfile会生效。

请记住,Gemfile只是ruby,因此您可以在其中包含所有类型的代码,而不仅仅是特定于Bundler的习惯用法。