我想使用south来使用mercurial管理开发和生产中的数据库更改。但是我不知道该怎么做!
假设我有一个根本不使用南方的项目。它在生产和开发中都与mercurial同步。一切都很好!
现在,有一天我想对应用程序测试的模型进行更改。那么,我在开发环境中的是
1. python manage.py convert_to_south test 2. python manage.py migrate
现在我改变模型然后
3. python manage.py schemamigration test --auto 4. python manage.py migrate
现在我把所有东西都交给了mercurial
5. hg addremove 6. hg commit -m "Converted to south and changed stuff" 7. hg push production
一切似乎在uat中工作正常但是,我不能让它在生产中起作用:(
所以我认为正确的工作流程是登录生产并应用更改
1. hg update
然后只迁移应用程序
2. python manage.py migrate
但是这不起作用,我得到一个奇怪的错误“test_table”已经存在(由于某种原因,南方想要再次创造表格)。另外,我在这里阅读Adding South to Django project, development & production我应该做一个python manage.py迁移测试 - 在执行迁移之前执行0001 - 但是这也没有用(我丢失的表或者像这样的东西有错误)。
那么?我该怎么办 ?将迁移应用于开发和环境的正确方法是什么?我应该将我的应用程序的/ migrations /目录从mercurial中删除并运行
python manage.py convert_to_south test and python manage.py schemamigration test --auto
开发和生产?
答案 0 :(得分:4)
convert_to_south
只是两个链接在一起的命令:schemamigration --init
+ migrate --fake
。因此,init
只会像往常一样创建迁移,而fake
会确保您不需要手动应用迁移。但是您的服务器会进行迁移,而不是创建它,因此您确实需要运行manage.py migrate test 0001 --fake
并且它应该正常运行。可能在安装syncdb
后没有运行south
,因此服务器数据库没有south
个表。
所以,运行:
manage.py syncdb
manage.py migrate test 0001 --fake