我应该如何升级一个过时的ruby on rails项目



我有一个项目目前正在rails 4~和Ruby 2~上运行,这是它的较低版本。我记不起确切的迭代,但它在大约8年前就结束了

就上下文而言,原来的dev已经不见了。该项目是在prod中直接开发的,从未有过功能测试环境。没有任何类型的合并历史可供参考,如果这有帮助的话。

我的任务是升级项目并修复过程中的任何错误。我把ruby提升到2.7~,rails提升到5.2~,然后所有的宝石都被提升了,直到bundle install停止出错。

这是一个重要的里程碑,但我一直在努力让它与rails server一起运行。我遇到了一些问题,我纠正或注释掉了,现在我被一个未初始化的方法卡住了。

我尝试了所有已知的修复方法,在这一点上,我想我需要用不同的方法再试一次。

提出了不同的想法:

  • 从文件中删除所有代码,并逐渐重新引入。

  • 移除整个模块并重新引入。

  • 开始在线咨询。

我不介意正确的过程是否乏味,只要它是有效的,而且我知道它不会完全无效

我认为删除所有非必要的组件,只是让登录页正常工作,是最好的第一步。但我对RoR的工作原理以及它运行所需的知识有限。

感谢大家

我尝试过的:

  • 将所有gem文件升级到与RoR的新版本兼容的版本。

  • 在错误发生时对其进行寻址,以绕过或完全删除它们。通过删除代码片段可能会产生更多意外错误。

没有简单的方法,但有一种方法。这种牦牛剃毛的复杂性取决于项目本身、其依赖性以及其他很难提前预测的因素。这可能很容易,也可能几乎不可能,但它可能只是乏味的,如果系统地处理,你可以在不太沮丧的情况下结束它。

从Ruby2升级到最新版本,比如3.2,并不是一件大事。3.x系列中最大的变化是如何处理kwargs(关键字参数或**args)。您可能想要逐步升级您的Ruby,因为我不确定Rails4是否能与Ruby3.x配合使用。

至于Rails本身,虽然没有太多突破性的更改,但对配置的表达方式有很多更改。请记住,您总是可以创建一个新项目来比较在当前版本的Rails中应该如何使用rails new来配置,这是您在确保application.rb等各种基础符合新样式时需要参考的内容。

一些最大的变化发生在资产管道中,自版本4以来,该管道发生了多次戏剧性的变化。现在,您可以选择如何配置它,所以找到一种您满意的方法并坚持下去。以前只有斯普劳克斯。

依赖关系是最容易产生摩擦的地方,通常是因为您将使用停止更新的东西,并且其版本引脚阻止Rails本身升级。您可能需要将其中一些换成更新的、受支持的版本。希望这不会太麻烦!

系统地仔细测试和使用升级指南。

  1. 确保您有良好的系统测试,并且可以依赖它们。现在编写一些基本的覆盖范围可能会节省您在多次迭代中手动测试的时间。然后看看什么似乎是";繁忙文件";并考虑在那里添加任何缺失的单元测试
  2. 移至rails 4的最后一个版本。测试并修复您所能修复的一切。尽可能地撞击每一颗宝石,同时保持轨道4并保持系统工作
  3. 转到Rails 5.0(而不是5.2!)。阅读Rails 4-5升级指南,并检查其中建议的每一件事。使用你的测试来确保在这一点上一切顺利。一路上可以升级宝石。每当你看到重大版本号更改时,请确保测试应用程序中的相关功能,并查阅gem的更新文档
  4. 移至导轨5.1。运行测试,更新gem。如果遇到问题,请考虑阅读其升级指南
  5. 对Rails 5.2重复步骤4
  6. 移至rails 5.2的最后一个版本
  7. 对导轨6&7.经常有升级博客文章详细介绍官方指南未涵盖的问题。它们通常可以节省你的时间。您还可以从X.0->X.2系列并跳过一步
Ruby版本升级

ruby版本的升级不那么重要(在1.x之后也不那么痛苦)。我可能会先跳到2.x的最后一个版本,然后等到Rails 6.1升级到ruby 3.0。在完成所有其他操作后,您可能会跳转到ruby 3.2。

未维护的宝石

你几乎肯定会遇到不再维护的宝石。在某些情况下,您可以找到替代功能,但重新编写这些功能以使用新的API通常需要相当多的精力。根据您的团队,可能值得确定一个功能是否不再需要,是否可以删除,而不是投资更新它

沿途部署

最后,如果这是一个积极开发的项目,或者即使不是,也可能值得在生产过程中的主要步骤中部署和运行。如果你试图在一个分支中完成这一切,那么你的合并将是疯狂的。

最新更新