python - 同时提供代码和数据库

标签 python database continuous-deployment

我使用 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/

相关文章:

selenium - 在 AWS CI/CD 管道中运行 selenium 测试的最佳方法是什么

python - Heroku Local 未将“gunicorn”识别为内部或外部命令

python - Tensorflow:在 tf.data.Dataset 中分割字符串的奇怪行为

MYSQL 优化器只是忽略我在复合索引中用于 ORDER BY 的最后一列

sql - 为什么这个 postgresql 查询这么慢?

java - Hibernate删除对象而不删除相关对象

jenkins - 推送图像与构建系统本身,docker

Jenkins 持续交付管道根据输入跳过阶段

python - 近似某个 epsilon 内的无限和

python - Scrapy - 由于编码而无法跟踪链接