如何管理我的ruby项目之间的依赖关系?

时间:2017-04-26 15:37:26

标签: ruby git dependencies bundler gem-bundler

这听起来像是一个基本问题,但我无法在互联网上找到任何答案。

所以我有一个git ruby​​项目database_models。它是一颗宝石。我想要其他3个项目来使用它。我已经将这个项目依赖于这样的3个项目:

gem "database_models", :git => "path", :branch => master

现在,我希望这3个项目的develop分支使用database_models的develop分支,我希望这3个项目的master分支使用{{1 database_models的分支,这样我的生产环境就可以稳定并独立于我的开发环境。

我可以看到4个这样的选项,我不喜欢其中任何一个:

  1. 将database_models部署到服务器,并使用路径更新这3个项目以引用database_models,而不是git

  2. Git子模块

  3. 用户不同版本的database_models gem(1.1,1.2,1.3 ......)。我可能需要我自己的宝石服务器,对吗?

  4. 在Gemfile中写一些代码,根据" bundle install"的环境选择正确的分支。跑了。

2 个答案:

答案 0 :(得分:1)

通常您使用Bundler with a local path。您的Gemfile使用gitgithub指向Git或Github仓库:

gem 'spree', github: 'spree/spree', branch: 'master'

请注意,包括分支。如果您愿意,可以让每个项目使用宝石的不同分支。如果您愿意,可以让每个项目使用宝石的不同分支。您还可以使用组根据环境部署不同版本的gem:

group :development, :test
  gem 'spree', github: 'spree/spree', branch: 'bleedinedge'
end

group :staging, :production
  gem 'spree', github: 'spree/spree', branch: 'master'
end

只要你继续推向Github,上面的工作就会很好。但是由于本地配置,您可以在命令行上运行以下命令:

bundle config local.database_modules ~/Projects/gems/spree

这会为您的~/.bundle/config添加一行,因此当您在项目中运行bundle时,它会从您的本地仓库中提取。

答案 1 :(得分:1)

  

用户不同版本的database_models gem(1.1,1.2,1.3 ...)。我可能需要我自己的宝石服务器,对吗?

我会这样做,只需让我的Gemfile通过标签选择正确的gem。这是一个例子: git 'https://github.com/rails/rails.git', tag: 'v5.0.0'

因此,您可以在github上存储自定义gem时执行相同的操作(无需gem服务器)。

Here is how to use tags with Git

这应该为您提供所需的灵活性。