2012-03-27 142 views
1

我有一个strnage问题。 我的django项目有myapp模块/应用程序。我的项目使用south进行模式迁移。 在本地主机上我运行了./manage.py schemamigration myapp --initial,然后我运行了migrate命令。django +南:migrate命令不会在数据库中创建表

但是,当在生产环境中执行migrate命令时,这不会在数据库中创建相应的表(myapp型号)。

这很奇怪,因为如果我执行migrate --list,myapp必须进行迁移并且它们都标记为(带有*符号)。

所以,我正在考虑删除myapp并重新创建它(与相应的迁移)。有更好的解决方案吗?

编辑: 我试图删除myapp并从头开始重新创建它。所以我也删除MYAPP的表中的数据库(在localhost和生产服务器上),毕竟我已经执行:

schemamigration myapp --initial命令在本地主机上

migrate myapp命令在本地主机上

migrate myapp 0001 --fake生产服务器上

但是南继续在生产服务器的数据库中不创建myapp表。

+0

你为什么叫'migrate ... --fake'? '--fake'使南方只标记迁移成功,但不要触及实际的数据库模式。 – ilvar 2012-03-27 02:43:30

回答

0

如果您删除了表格,则不应该运行--fake,除非您先执行manage.py syncdb。没有表格,您应该可以运行python manage.py migrate myapp并完成它(或manage.py syncdb)。由--initial创建的第一次迁移已在其中创建了表语句。

--fake明确告诉南方不做任何事情,只是假装它迁移(执行数据库更改)并将历史记录表标记为此。

+0

因此:我删除myapp的所有表(在本地主机和生产服务器上)。然后我运行'syncdb'或'schemamigration --initial'。然后我部署该项目。接着? 它继续不使用此方法在生产服务器上创建数据库表。 – 2012-03-27 04:23:42

+0

@GiovanniChetelodicoafare,如果所有的表都被删除了,只要运行'migrate'就会创建这些表,如果你在应用程序目录中有'0001_initial'迁移文件的话。确保'south_migrationhistory'表是最新的,并且没有用于您正在重置的应用程序的条目。 – 2012-03-27 18:09:26

+0

我决定不使用南方myapp,因为我还没有更改myapp的模型。所以在生产服务器上运行syncdb我解决了这个问题。如果我更改models.py,我将使用South for myapp,并且我必须执行迁移。谢谢您的帮助。 – 2012-03-27 22:15:40

0

我知道它有点晚了,但有同样的问题,我发现问题是,我的manage.py指向错误的设置文件,因此错误的数据库。确保您的manage.py指向正确的设置文件,并正在对正确的数据库进行迁移。如果您使用多个manage.py文件或多个设置文件,则可能会出现这种情况。

1

如果您不小心或有意地在您的数据库中删除了某个表并且您正在尝试运行./manage migrate myapp这不会在您的数据库中创建已删除的表。 因为South没有与您的数据库联系。

如果你想重新创建你的表。将您的架构迁移到以前的版本并最新迁移它。请使用下面的代码

manage.py migrate myapp 0002 --fake 
manage.py migrate myapp 

注意:002是您以前的迁移版本。

相关问题