我正在新的开发环境中部署项目。
当我使用South时,我做了:
$ python manage.py syncdb --all
$ python manage.py migrate --fake
我使用syncdb --all
来应用实际的模型状态。
然后migrate --fake
将所有模型标记为已迁移。
但在那之后,我的模型不在最后一个版本(缺少字段)
我做错了什么?
我认为我的所有修改都有迁移。
如果我这样做
$ python manage.py syncdb
似乎创造了自从我使用South(预期)时的第一个状态 但是接下来
$ python manage.py migrate
某些表格显示为已创建
答案 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 app_name = 'blah'