使用南方时正确的工作流程,并且开发和生产django环境与mercurial同步

时间:2012-05-12 12:38:41

标签: django mercurial django-south

我想使用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 

开发和生产?

1 个答案:

答案 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