Docker容器回滚后在Clojure中回滚迁移

Docker容器回滚后在Clojure中回滚迁移,clojure,database-migration,Clojure,Database Migration,我们有一个Clojure服务,它运行在Amazon ECS中运行的Docker容器中。部署容器时,Clojure服务将连接到数据库,并始终在启动时运行迁移 问题是,如果我们需要回滚部署的代码,那么部署的容器中就有旧代码,并且不能访问最新容器所拥有的回滚迁移 这是一个不经常发生的问题,但当它发生时,我们如何执行DB回滚 我们现在能想到的最好办法就是手动操作 有人有这样的编程经验吗? 看起来你应该考虑把你的迁移与你的实际部署分开。每个人都有自己的迁移管理偏好,但当您将迁移打包到应用程序中时,您将失去

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

问题是,如果我们需要回滚部署的代码,那么部署的容器中就有旧代码,并且不能访问最新容器所拥有的回滚迁移

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

我们现在能想到的最好办法就是手动操作


有人有这样的编程经验吗?

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

您肯定应该能够拍摄数据库的快照。使用快照来练习DB升级,并在prod DB上实际执行之前验证它是否与新代码一起工作。如果,尽管您进行了试用升级,但在prod中仍然不起作用,至少您可以从快照中恢复DB。您可以安全地使用DB快照,而不会对prod造成危险,这对于开发新功能和解决prod中的错误也是非常宝贵的。