ruby-on-rails - 如何安全地更新 Rails 应用程序中的所有 gem

标签 ruby-on-rails ruby rubygems

<分区>

Rails 应用程序可能有数百个依赖项,如果不加以检查,通常都需要定期更新。在运行 bundle outdated 并获得 100 多个过时的 gem 列表后,我有点害怕要查找每个 gem,找到它的 CHANGELOG,并确认更新不会破坏任何东西。似乎甚至没有一个确认的方式来 update a single gem无需引入其所有依赖项。

我找到了 this project它应该在通过自动化测试后在单独的提交中更新每个 gem。这将有助于简化流程,但它不会告诉您哪些 gem 版本升级包括 DSL 更改(例如 this one )。有时我不检查就盲目更新小版本或补丁版本,希望作者遵循SEMVER -like 版本控制约定。其他时候没有文档(没有历史或 CHANGELOG 文件)。

当我编写自己的代码时,我一定会在提交之前检查每一行。是否应该对更新库保持同样的警惕?通常在一开始就包含库时并没有做太多的努力。但是在新建项目中,利用其他人的代码不会有什么损失,反而会收获很多。在一个成熟的项目中,几乎不能容忍新的失败。

是否有任何工具或流程可用于一次拉取更新、以类似差异的方式查看更改、查看更改日志(如果有)以及运行测试套件?

最佳答案

我的策略是只要有可能,一次只更新少数 gem。显然,依赖树会使这变得困难,但我已经因盲目运行 bundle update 而被烧毁了几次,特别是在具有 100 多个 gem 的大型项目中,如果可能的话避免它。更新较小的 gem 组还提供了一个额外的好处,因为任何副作用都更容易隔离和解决。

此外,我尝试养成使用专用 git 提交对 Gemfile/Gemfile.lock 进行任何更改的习惯。因此,任何和所有依赖项更新都只有一次提交,仅包含对这两个文件的更改。这使得使用 git bisect 进行调试变得更加容易,并且在需要时可以轻松恢复更改。它还有助于解决依赖性不可避免的反复试验过程。我发现这种策略也适用于迁移(尽管迁移比依赖 IMO 更棘手)。

当然,每隔一段时间就会对主要依赖项(如 Rails、Sidekiq、ActiveAdmin、RSpec 等)进行更新。阿尔。出现了,但这种情况相对较少,并且保持“较薄”的依赖性使这种药丸更容易吞咽。

关于ruby-on-rails - 如何安全地更新 Rails 应用程序中的所有 gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36298381/

相关文章:

ruby - 通过属性值获取节点

ruby - rb-fsevent 是做什么的?

ruby-on-rails - 如何在 Rails ActiveRecord 中的日期指定小于今天的条件

ruby-on-rails - Rails 不知道如何构建任务

ruby-on-rails - 如何使用 Devise 向 Rails 中的新注册用户发送欢迎电子邮件?

ruby-on-rails - 启动同一作业的多个延迟作业进程

ruby - Faker 中的单词长度

ruby-on-rails - 无法在 Rails 中安装旧版本的 Rake Gem

java - 这是 websocket 编程的正确使用吗?

ruby-on-rails - 调试 502 Bad Gateway 错误 - Ubuntu、Nginx、Unicorn