clojure - Docker 容器回滚后在 Clojure 中回滚迁移
问题描述
我们有一个在 Amazon ECS 中运行的 Docker 容器中运行的 Clojure 服务。部署容器后,Clojure 服务会连接到数据库并始终在启动时运行迁移。
问题是,如果我们需要回滚代码部署,部署的容器中包含旧代码,并且无法访问最新容器具有的回滚迁移。
这是一个不经常发生的问题,但是当它发生时,我们如何执行 DB Rollback?
我们现在能想到的最好的办法就是手动完成。
任何人都有以编程方式执行此操作的经验吗?
解决方案
看来您应该考虑将迁移与实际可部署分开。每个人对管理迁移都有自己的偏好,但是当您将迁移打包到应用程序中时,您会失去灵活性。专用的迁移工具在单独运行时可以更智能地运行。例如,如果没有某种快照系统,某些数据库迁移是不可能回滚的,例如任何删除数据的迁移。此外,您的应用程序拥有执行迁移所需的权限是一种不好的做法。您也无法轻松审核哪个用户执行了迁移。
推荐阅读
- dryioc - 注册一个服务,以便 Resolve(args) 将 args 作为愚蠢的位置参数传递?
- python - Django 为 ordering_fields 使用计算字段
- cordova - 防止包含 target=“_blank” 链接的 iframe 接管应用程序
- pandas - 使用 DateOffset 重新采样可以给出 NotImplementedError
- redis - BITOP NOT 在 Redis 5.0.5 中无法正常工作
- php - Laravel 6.3.0 + Apache2 - 内核加载后连接被重置
- timezone - Jekyll:欧洲的周数
- ddev - 如何在 DDEV Web 容器中添加和使用 nvm?
- teradata - 将粘贴结果从 Teradata SQL 助手复制到 Excel
- excel - 在工作簿之间查找和复制一系列数据