使用所有依赖项升级rails版本的最佳做法是什么?

时间:2016-07-24 06:06:56

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

每当发生一些主要的rails版本碰撞时,有时候为了升级现有的rails(4.x,5.x等)应用程序真的很痛苦,因为有很多宝石可能依赖于旧版本的rails(ActiveRecord,ActionController) ,ActiveModel等)。而那些依赖宝石有时需要花费太多时间进行升级(要么不维护,要么不活跃,要么不具备核心维护团队,即使是接受Pull请求)。人们周围的解决方案是什么?

人们建议的一个工作流程是分叉所有相关的宝石,然后更改您喜欢的任何内容,并不断更新它们各自的主/主分支。我很想听听人们在工作流程中遵循的内容。

1 个答案:

答案 0 :(得分:4)

我认为你应该删除/替换在主要Rails更新后不久可用的兼容版本的gem。

在Rails 5发布之前差不多6个月,可以使用Rails 5的Beta版本。如果某个宝石在这段时间内没有更新,它可能不会在以后更新,或者它也会减慢对其他所有Rails更新的影响。

当你遇到这种情况时,我会看到几个选项:

  • 重新审视您使用该宝石的原因。有时你会使用gem来做一些简单的方法。在您的应用程序(或您自己的gem)中重写这些方法并删除此依赖项。

  • 是否还有其他项目可以解决同样的问题?有时这些项目甚至有更好的结构或其他好处。您可以考虑切换到那些宝石。希望你封装了旧的宝石并且没有过多地定制那个宝石,因为这样就更难以替换它。

  • 您可能会考虑将该宝石分叉并自行解决问题(向原始宝石发送拉取请求的奖励积分)。这在短期内是一个好的解决方案。但是你会非常喜欢与下一个Ruby版本的这个gem有类似的问题。此外,当您使用分叉版本的宝石时,您可以独立完成。你真的想在接下来的几年中维护那个私人宝石版吗?

随着您添加到堆栈中的每个gem,您的应用程序都会产生成本和风险。观看宝石的成本,它是如何变化的,是否有安全修复?以及宝石将在某个时候被抛弃的风险。

当你遇到这样的情况时,你可以预先做一些事情来减轻痛苦:

  • 当您只需要一些来自该gem的简单帮助方法时,避免向您的应用程序添加宝石。

  • 用您自己的包装器封装该gem。并为您的包装器界面提供良好的测试覆盖率。这使得更改底层宝石变得更加容易。

  • 一旦遇到问题,请务必准备好删除/更换宝石。当您在申请中遇到问题需要解决时,等待外部宝石维护者可能不是一个好策略。

相关问题