使用带有Budler的Gemfiles和两个项目

时间:2015-05-07 09:10:56

标签: ruby git gem bundler gemfile

TL; TR

我们有两个项目(minitest项目和一个页面对象项目)。 Minitest项目使用页面对象项目。当Jenkins运行测试时,我们使用远程git路径来访问页面对象项目。当我们在本地运行它时,我们更改minitest项目中的gem文件以使用本地路径\或本地git repo。这导致我们需要不断更改gem文件。我们不希望这样做。我们如何设置它以便我们不需要继续更改gem文件?

长版

我有两个紧密耦合的Ruby项目。这两个项目都用于支持Capybara的测试。一个项目包含Minitest测试。另一个项目包含页面对象。 minitest项目使用页面对象项目。页面对象项目作为gem发布,以便其他团队可以使用它。我们经常需要同时编辑这两个项目。

我正在使用Bundler来管理宝石。这些项目曾经是两个不同的git回购。

测试在Jenkins中运行,当我们处理它们时,我们在本地运行它们。当测试在Jenkins中运行时,minitest项目可以将页面对象项目作为已发布的gem或远程git repo引用。

我们遇到的问题是我们需要更改minitest项目的gem文件。我们会将其从指向远程git repo更改为签出(本地)路径。或者我们会指向当地的git repo。在这种情况下,我们仍然需要使用本地分支名称更新minitest项目的gem文件。我们需要使用任一种方法编辑gem文件,然后我们必须记住在签入和合并之前将其更改回来。

然后我们将两个项目都移到了一个仓库中。现在minitest项目中的gem文件仅使用相对路径,例如path => ...。这意味着我们不需要在minitest项目中不断更新gem文件。但是,现在当我们运行bundle installbundle update时,只使用minitest项目中的gem文件(至少这是我假设发生的事情)。

如何在我的开发机器上使用不同的gem路径\ git repo到Jenkins中使用的内容,而不连续更改gem文件?

我想知道在这种情况下我应该采用什么方法?可以避免更改minitest项目的gem文件吗?

1 个答案:

答案 0 :(得分:0)

考虑使用bundler的群组(Gemfile):

group :project1 do
  gem 'rspec'
end

group :project2 do
  gem 'minitest'
end

然后在application.rb中指定要使用的组,例如

Bundler.require(:project1) # or :project2 depending on the project

此处有更多信息:http://bundler.io/groups.html