当前位置:  开发笔记 > 后端 > 正文

以编程方式检查是否存在需要部署的django南迁移

如何解决《以编程方式检查是否存在需要部署的django南迁移》经验,为你挑选了1个好方法。

我的部署策略如下(使用Fabric):

    创造一个新的virtualenv

    在新的virtualenv中部署新代码

    显示维护页面

    将当前数据库复制到新数据库

    迁移新数据库

    将新代码指向新数据库

    符号链接当前virtualenv到新的venv

    重启服务

    删除维护页面

我想快速迭代.现在,大多数代码更改都不包含迁移.此外,数据库正在增长,因此每次部署(通常很小)更改时,通过复制数据库会产生很多开销.为避免复制数据库,我想检查是否存在需要部署的迁移(在步骤4之前).如果没有迁移,我可以直接从第2步到第7步.如果有,我将按照所有步骤进行操作.为此,我需要以编程方式检查是否存在需要部署的迁移.我怎样才能做到这一点?



1> Philip Clark..:

在部署新代码的步骤2中,您可以部署一个脚本,该脚本在服务器上运行时将检测是否有新的迁移.

示例代码如下:

# copied mostly from south.management.commands.migrate
from south import migration
from south.models import MigrationHistory

apps  = list(migration.all_migrations())

applied_migrations = MigrationHistory.objects.filter(app_name__in=[app.app_label() for app in apps])
applied_migrations = ['%s.%s' % (mi.app_name,mi.migration) for mi in applied_migrations]

num_new_migrations = 0
for app in apps:
    for migration in app:
        if migration.app_label() + "." + migration.name() not in applied_migrations:
            num_new_migrations = num_new_migrations + 1

return num_new_migrations

如果将上述代码包装在脚本中,则结构部署脚本可以使用运行操作来获取新迁移的数量.

如果返回零,则可以跳过与复制数据库相关的步骤.   

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有