2

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

当我使用 South 时,我做了:

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

我曾经syncdb --all应用模型的实际状态。

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

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

我究竟做错了什么 ?


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

如果我做

$ python manage.py syncdb

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

$ python manage.py migrate

一些表显示为已创建

4

2 回答 2

2

实际上,这对我的情况应该没问题

$ 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

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

于 2013-12-28T10:28:52.133 回答
1

--fake选项在尝试创建新迁移时不会避免错误。它记录了迁移已应用而没有实际应用它们。

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

要将现有项目转换为south,您首先需要转换应用程序

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

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

如果要删除特定应用程序的迁移,

DELETE FROM south_migrationhistory WHERE app_name = 'blah'
于 2013-06-15T12:23:13.523 回答