首页 > 解决方案 > Docker 容器回滚后在 Clojure 中回滚迁移

问题描述

我们有一个在 Amazon ECS 中运行的 Docker 容器中运行的 Clojure 服务。部署容器后,Clojure 服务会连接到数据库并始终在启动时运行迁移。

问题是,如果我们需要回滚代码部署,部署的容器中包含旧代码,并且无法访问最新容器具有的回滚迁移。

这是一个不经常发生的问题,但是当它发生时,我们如何执行 DB Rollback?

我们现在能想到的最好的办法就是手动完成。

任何人都有以编程方式执行此操作的经验吗?

标签: clojuredatabase-migration

解决方案


看来您应该考虑将迁移与实际可部署分开。每个人对管理迁移都有自己的偏好,但是当您将迁移打包到应用程序中时,您会失去灵活性。专用的迁移工具在单独运行时可以更智能地运行。例如,如果没有某种快照系统,某些数据库迁移是不可能回滚的,例如任何删除数据的迁移。此外,您的应用程序拥有执行迁移所需的权限是一种不好的做法。您也无法轻松审核哪个用户执行了迁移。


推荐阅读