Django - 部署syncdb&南

时间:2013-06-15 08:38:08

标签: django deployment django-south

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

当我使用South时,我做了:

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

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

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

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

我做错了什么?


我认为我的所有修改都有迁移。

如果我这样做

$ python manage.py syncdb

似乎创造了自从我使用South(预期)时的第一个状态 但是接下来

$ python manage.py migrate

某些表格显示为已创建

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:1)

尝试创建新迁移时,

--fake选项无法避免错误。它记录了迁移已应用without actually applying them.

此外,您需要--ignore-ghost-migrations--delete-ghost-migrations来实现您的目标。

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

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

  • 转到./manage.py dbshell
  • DELETE FROM south_migrationhistory WHERE id> 0; //请注意,这会删除表格中的所有内容

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

DELETE FROM south_migrationhistory WHERE app_name = 'blah'