Github 的 Rails 升级花了大约一年半的时间,这是有原因的,首先,Rails 本身的升级并不总是平滑的,有些版本有重大改变(breaking changes)。 Rails 改进了版本 5 的升级过程,这意味着虽然 3.2 到 4.2 需要 1 年,4.2 到 5.2 只需要 5 个月。

另一个原因是 GitHub 的代码库起码有 10 年的历史,多年来,技术债务逐渐增加,并且必然存在潜在的问题,如果使用的是旧版本的 Rails,工程师将不得不添加更多的猴子补丁(monkey-patch)或实现上游已经实现的功能。

最后,当我们开始时,并不清楚需要哪些资源来支持升级,因为我们大多数人之前从未进行过Rails 的升级,所以我们一直在学习。该项目最初由 1 名全职工程师和一小批志愿者组成,我们将该团队培养成 4 名全职工程师和志愿者。每个版本的升级都意味着我们会学到更多,下一个版本的升级速度会更快。

通过这项工作,我们学到了一些重要的经验,我们希望下一次升级更容易:

  • 早升级,经常升级(Upgrade early and upgrade often)
  • 保持升级基础架构(Keep upgrade infrastructure in place)
  • 使用上游提供的工具,而不是自己造轮子(Upstream your tooling instead of rolling your own.)
  • 避免使用私有 api(Avoid using private API’s in your frameworks)
  • 解决技术债(Address technical debt often)
  • 增量升级(Do incremental upgrades)
  • Keep up the momentum.
  • Expect things to break.
10-15 14:49