一次性提供代码和数据库

时间:2012-06-17 06:43:25

标签: python database continuous-deployment

我使用fabric将新版本的代码上传到服务器,然后运行几项任务使其服务于新版本而不是旧版本。

在这些任务中还有一个syncdb,但这意味着有一个窗口,我有新的代码版本和旧的数据库表(或旧的代码版本与新的同步数据库)。

问题: 我是否需要手动复制数据库,与副本同步,然后立即替换旧代码版本和原始数据库?

由于这似乎是一个非常普遍的问题,我认为应该已经有了解决这个问题的工具或具体方法。有人知道吗?

(我的另一个担忧是,在部署过程中出现问题可能会出错,我希望在没有破坏数据库与代码同步的情况下回退到之前的状态。)

1 个答案:

答案 0 :(得分:1)

当您的部署包含数据库架构迁移时,很难实现零停机。例如,etsy.com上的人使用索引的,分片的主 - 主对,自定义的分片感知ORM,他们不会让db生成主键/时间戳等,也不会在db中强制执行外键。 http://codeascraft.etsy.com/2012/04/20/two-sides-for-salvation/

如果你能够容忍一些计划的部署停机时间,甚至15分钟,这就容易多了。 (假设您使用dbdeploy等工具编写了脚本化的数据库模式升级。)