我使用 Fabric 将代码的新版本上传到服务器,然后它运行几个任务以使其服务于新版本而不是旧版本。
在这些任务中还有一个syncdb,但这意味着有一个窗口,我在其中拥有带有旧数据库表的新代码版本(或带有新同步数据库的旧代码版本)。
问题: 我是否需要手动复制数据库,与副本同步,然后一次性替换旧代码版本和原始数据库?
由于这似乎是一个非常常见的问题,我认为应该已经有解决此问题的工具或特定方法。有人知道吗?
(我的另一个担忧是部署过程中可能会出现问题,我想回退到之前的状态,而不会出现损坏的数据库未与代码同步的情况)。
最佳答案
当您的部署包含数据库架构迁移时,很难实现零停机。举个例子,etsy.com 的人们使用索引、分片的主-主对、自定义的分片感知 ORM,他们不让数据库生成主键/时间戳等,也不在数据库中强制执行外键。 http://codeascraft.etsy.com/2012/04/20/two-sides-for-salvation/
如果您可以容忍一些计划内的部署停机时间(甚至 15 分钟),那么这会容易得多。 (假设您使用 dbdeploy 等工具编写了数据库架构升级脚本)。
关于python - 同时提供代码和数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11069433/