我在生产中运行了几个django-cms 2.4.3 (django 1.5.5)应用程序。我正在升级到django-cms 3.1.1 (Django 1.8/python2.7)。我可以在没有问题的情况下启动测试环境并运行。然而,导入我现有的数据一直是问题所在。我试过:
结果是一系列表已经存在,违反了空约束,列不存在,等等。
然后,我尝试直接从postgresql导出(作为备份)并还原到开发安装中。运行python manage.py迁移。得到一系列类似于上面的附加错误。运行和迁移一起迁移--假的-初始的和-假的。问题是,许多页面(让我们以cms_page为例)已经将3.x中的字段从2.4中更改了。迁移只会查看迁移中的变化,表中的差异。一些字段被添加,一些字段被丢弃。我查看了cms_page迁移0001文件。它创建带有额外列的页表。迁移0003增加了更多的字段,并删除了一些字段。名单还在不停地写着。
我花了三天的时间试图迁移我现有的数据。我甚至从django-cms 3.0开始,把一些插件自动升级到3.1 (不,我不包括pip安装升级)。非常令人沮丧。
我甚至开始手动更新数据库表。表约束使得这几乎是不可能的。现在,我将彻底重写django-cms迁移。有什么东西是我忽略的,会使数据迁移更容易吗?也许继续使用django-cms 2.4并将django升级到受支持的版本?
发布于 2015-10-19 08:38:01
除非我误解了你的所作所为,否则我不认为你这样做是正确的。
您不应该在迁移方面遇到问题;迁移的目的是为了使您所做的事情(跨数据库更改进行升级)更容易。
如果您发现自己手动操作数据库表,则做错了,使事情变得非常困难。
什么应该起作用:
( 1)复制现有的2.4.3站点代码、数据库和所有内容。如果它能工作的话,不要在生产网站上触摸任何东西。从现在开始,只在副本上工作。
2)确保移民确实是最新的。从你的描述听起来,也许他们不是。
对于迁移目录中的每一次迁移,您应该在数据库中的迁移表中有一个条目。如果不是,但您确信您的数据库与模型代码是最新的,您可以运行migrate --fake来将这些迁移标记为运行。
(如果您使用syncdb创建数据库,并且没有使用--fake进行迁移以将表标记为最新的表,您可能会发现自己处于这个位置,我怀疑这可能是问题的根源。)
如果你在迁移表中有一些是最新的,而另一些则不是和不准确的记录是最新的,祝你好运;你将陷入混乱,你将不得不小心地选择你的出路。
( 3)一旦您的代码、数据库表和迁移历史都是从同一页中唱出来的,并且彼此一致,就再拿一份代码和数据库进行工作,这样您至少有一个安全的地方可以返回。
4)现在开始升级软件,一次尽可能地升级一个组件,并运行迁移。使用django CMS发行说明帮助您了解正在更改的内容、需要更改的其他内容以及需要采取的任何其他步骤。
在每个组件被迁移后检查是否一切正常。
5)您也需要升级Django;在继续下一个Django CMS更新之前,请使用发布说明来确定何时必须升级django。
https://stackoverflow.com/questions/33191448
复制相似问题