如何为一个转移到Rails 5的项目维护两个版本的Rails?

时间:2016-08-22 14:38:13

标签: ruby-on-rails ruby ruby-on-rails-4 bundler ruby-on-rails-5

我的Rails 4.2应用程序和宝石套件目前正在升级到Rails 5.有没有办法维护2个单独的Gemfiles和Gemfiles - 一个用于Rails 4.2,另一个用于Rails 5,并将其推送到git,所以多个人们可以在Rails 4.2和Rails 5中使用应用程序吗?

1 个答案:

答案 0 :(得分:1)

通常的答案是分支机构。我假设你有一套正在开发和升级的宝石,以及一个或多个依赖这些宝石的“主要项目”,同时也在积极开发和升级。

对于宝石,在开发rails 5版本时,您可能有一个分支master和一个分支rails-4。作为最前沿的主人,升级了。新功能开发可以在rails-4中完成,并定期合并到master。

然后,在您的主要项目中,您也会这样做。在创建新分支之前,您可以在主项目的Gemfiles中指定它们应该使用特定分支,例如:

gem 'mygem', :git => 'https://github.com/my/gem.git', :branch => 'rails-4'

然后,您的主项目可以创建自己的rails-4分支。在master上,您重新编辑Gemfile以使其返回指向master。

同样,新功能开发可以在rails-4分支中继续,并且可以合并到master中,直到master准备好进行生产。一旦你发布了rails 5版本并且每个人都很满意,可以删除rails-4分支。

[编辑]:如果出于某种原因,你不喜欢git branches,我看到了图书馆作家越来越多的趋势,在他们的项目中增加了一个“gemfiles /”文件夹。

我的建议是在项目中使用所有不同版本的Gemfiles填充该文件夹,然后使用git rm Gemfile从根目录中删除Gemfile。另外,将行/Gemfile/Gemfile.lock添加到.gitignore。承诺这一改变。

然后,当新开发人员检出您的仓库时,他们需要链接到他们希望使用的Gemfile。在链接到他们想要的文件之后,例如ln -s gemfiles/Gemfile-rails-4 Gemfile他们应该能够bundle install

运行

我应该注意到我以前从未这样做过 - 但那将是一般策略。在一般情况下仍然建议使用分支 - 这样,您可以避免代码中的条件,并避免在升级过程中留下残余的“残缺”。