【问题标题】:Django - Deploy syncdb & SouthDjango - 部署 syncdb & South
【发布时间】:2013-06-15 08:38:08
【问题描述】:

我正在一个新的开发环境中部署一个项目。

当我使用 South 时,我做到了:

$ python manage.py syncdb --all
$ python manage.py migrate --fake

我使用syncdb --all 来应用模型的实际状态。

然后migrate --fake 将所有模型标记为已迁移。

但在那之后,我的模型不在上一个版本(缺少字段)

我做错了什么?


我假设我所有的修改都有迁移。

如果我这样做

$ python manage.py syncdb

它似乎创建了自我使用 South 以来的第一个状态(这是预期的)
但后来

$ python manage.py migrate

有些表显示为已创建

【问题讨论】:

  • 缺少字段的应用有迁移吗?您能否验证它对您缺少的字段进行了迁移?如果您运行syncdb 并在之后执行“真正的”migrate,它是否有效?
  • 对不起,我的意思是根本不运行syncdb而只使用迁移?这行得通吗?
  • 目前还没有表,所以无法使用。

标签: django deployment django-south


【解决方案1】:

其实这对我来说应该没问题

$ python manage.py syncdb --all
$ python manage.py migrate --fake

最近不得不重新部署我的应用,我遇到了同样的问题。
我刚刚意识到我对导致问题的模型进行了双重初始迁移

0001_initial.py
0002_initial.py
0003_auto__add_field_mytable_myfield.py

我只是删除并重命名

0001_initial.py
0002_auto__add_field_mytable_myfield.py

然后重做整个数据库部署(显然不要忘记更新我其他主机上已经应用的迁移)

【讨论】:

    【解决方案2】:

    --fake 选项在尝试创建新迁移时不会避免错误。它记录了迁移已应用without actually applying them.

    此外,您需要 --ignore-ghost-migrations--delete-ghost-migrations 来实现您正在寻找的东西。

    要将现有项目转换为south,首先需要convert the app

    现在,如果您已经运行 --fake 来恢复,您可以这样做:

    • 转到./manage.py dbshell
    • 从 id > 0 的 south_migrationhistory 中删除; //请注意,这将删除表中的所有内容

    如果您想删除特定应用的迁移,

    DELETE FROM south_migrationhistory WHERE app_name = 'blah'
    

    【讨论】:

    • 感谢您提供详细信息。我会从文档中检查--ignore-ghost-migrations--delete-ghost-migrations。我目前正在尝试为已经使用 south 的项目部署一个新的开发环境,其中包含许多迁移。所以我的应用程序已经南下,我从一个全新的数据库开始
    • 那么你知道你要找什么了吗?
    猜你喜欢
    • 2013-01-31
    • 1970-01-01
    • 2012-12-18
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2014-02-14
    相关资源
    最近更新 更多