【问题标题】:How to reset south migrations to capture the current state of my django models如何重置南迁移以捕获我的 django 模型的当前状态
【发布时间】:2012-10-01 02:46:26
【问题描述】:

我有一个应用,目前有 35 次南迁移。这些在设置新部署时需要一段时间才能完成(我们经常创建新部署),并且应用程序在不断发展——添加更多迁移。此外,迁移包括一些潜在的复杂数据迁移和一些破坏 SQLite3 的自定义迁移(现在不是一个大问题,因为一切都在 Postgres 上,但能够建立一个快速的测试环境很好),通常只是更多可能出错的事情。

我们所有的部署和开发人员都是最新的,我想清除应用的所有迁移并创建一个捕获应用当前状态的初始迁移 (0001),然后继续从那里开始新的迁移。几年前我用一个不同的应用程序做了这个,效果很好,但是我忘记了这个过程是什么,并且忘记了解释如何做的博客文章。谁能帮我分解一下这个过程?

【问题讨论】:

    标签: django django-south


    【解决方案1】:

    我想通了(还不错)。要设置迁移重置,我执行以下操作:

    rm <app-dir>/migrations/*
    python manage.py schemamigration <app-name> --initial
    python manage.py migrate <app-name> 0001 --fake  --delete-ghost-migrations
    

    我将更改提交到存储库,然后对于其他地方的代码的每次部署,运行:

    python manage.py migrate <app-name> 0001 --fake --delete-ghost-migrations
    

    确保在上次迁移到其他任何地方并重置内容之间没有添加任何新内容,否则新的 0001 迁移将与架构不匹配!

    注意事项:查看 guettli 的评论(以及我的回复)

    【讨论】:

    • 我发现此解决方案存在两个问题。第一:数据迁移的变化丢失。这不会影响您的实时系统,但会影响您从头开始设置的新开发系统。秒:假设您有 app2,它依赖于已删除的模式状态/迁移。
    • 好点,@guettli!这些场景通常不适用,但人们需要了解它们,并确保它们不适用于您的情况或由您处理。
    • 至于#1:许多数据迁移实际上是迁移,不适用于新部署(因为没有要迁移的记录)。但是,正如我假设您在这里解决的那样,在某些情况下,数据迁移可用于设置数据(例如,设置权限组),在这种情况下他们需要坚持下去。至于#2,在我的回答中,假定在核对之前将每个部署更新到最新模式是可行的,但这对于共享或开源应用程序或大型团队来说可能是不可能的。在这种情况下,重置迁移可能不值得。
    猜你喜欢
    • 2014-06-22
    • 2018-04-22
    • 1970-01-01
    • 2016-10-19
    • 2011-03-19
    • 2014-12-21
    • 2011-04-03
    • 2012-02-23
    相关资源
    最近更新 更多