【问题标题】:Migrating Django-CMS 2.4.3 to Django-CMS 3.1.1将 Django-CMS 2.4.3 迁移到 Django-CMS 3.1.1
【发布时间】:2016-01-16 10:39:53
【问题描述】:

我有几个 django-cms 2.4.3 (django 1.5.5) 应用程序在生产中运行。我正在升级到 django-cms 3.1.1 (Django 1.8/python2.7)。我可以毫无问题地启动并运行测试环境。但是,导入我现有的数据一直是个问题。我试过了:

  1. 'python manage.py dumpdata > dump.json' 在生产服务器上。
  2. 'python manage.py loaddata -ignorenonexistent dump.json' 在开发服务器上。

结果是一系列表已经存在,违反空约束,列不存在等...

然后我尝试直接从 postgresql 导出(作为备份)并恢复到开发安装。运行 python manage.py 迁移。得到一系列与上述类似的附加错误。使用 migrate --fake-initial 和 --fake 运行 migrate。问题是许多页面(以 cms_page 为例)已经从 2.4 更改了 3.x 中的字段。 Migrate 只会查看迁移中的变化,表中的差异。添加了一些字段,删除了一些字段。我查看了 cms_page 迁移 0001 文件。它创建带有额外列的页表。迁移 0003 添加了更多字段并删除了一些字段。名单还在继续。

我花了三天多的时间试图迁移我现有的数据。我什至从 django-cms 3.0 开始,将一些插件自动将我的开发环境升级到 3.1(不,我没有包括 pip install --upgrade)。简直令人沮丧。

我什至开始手动更新数据库表。表约束使这几乎是不可能的。现在我正在考虑完全重写 django-cms 迁移。有什么我忽略的东西会使数据迁移更容易吗?也许继续使用 django-cms 2.4 并将 django 升级到受支持的版本?

【问题讨论】:

    标签: django-cms


    【解决方案1】:

    除非我误解了你在做什么,否则我不认为你这样做是正确的。

    您应该不会遇到迁移问题;它们专门设计用于使您正在做的事情(跨数据库更改升级)更容易。

    如果您发现自己手动操作数据库表,那么您做错了,只会让事情变得非常困难。

    应该怎么做:

    1) 复制现有的生产 2.4.3 站点 - 代码、数据库和所有内容。如果它有效,请不要触摸生产现场本身的任何东西。从现在开始,只在副本上工作。

    2) 确保迁移确实是最新的。从您的描述中听起来可能不是。

    对于迁移目录中的每个迁移,您应该在数据库的迁移表中有一个条目。如果没有,但您确定您的数据库与模型代码是最新的,您可以运行 migrate --fake 将这些迁移标记为运行。

    (如果您使用syncdb 创建数据库并且没有使用--fake 运行迁移以将表标记为最新,那么您可能会发现自己处于这个位置,我怀疑这可能是问题的根源。)

    如果您有一些表是最新的,而另一些表不是最新的,并且迁移表中哪些是最新的记录不准确,那么祝您好运;你陷入了混乱,你必须小心翼翼地找出路。

    3) 一旦你的代码、数据库表和迁移历史都在同一个页面上运行并相互一致,再复制一份代码和数据库并从那里开始工作,这样你至少有一个安全的地方可以返回到。

    4) 现在开始升级软件,尽可能一次升级一个组件,然后运行“migrate”。使用django CMS release notes 帮助您了解正在更改的内容、需要更改的其他内容以及您需要采取的任何其他步骤。

    在迁移每个组件后检查一切是否正常。

    5) 你也需要升级 Django;在继续下一次 django CMS 更新之前,请使用发行说明确定何时必须升级 Django。

    【讨论】:

    • 您上面的第 2 步可能是问题所在。在过去的两天里,我一直在使用 Django-CMS 3.0.15,而不是 3.1。我已经走得更远了,但仍然没有运气。我从一个副本和副本的副本中工作(对于 django 和数据库,所以当我必须重新开始时,我有一个工作的基础)。我将返回并按照您的指南重新开始。一旦我知道更多,我会尽快发布。感谢您的帮助。
    • 我想我什至会后退一步,尝试让 Django-CMS 2.4.3 与 Django 1.7 一起工作。已经在运行 Python 2.7。
    • 数据库和南迁移是同步的。终于得到一份 Django-CMS 2.4/Django 1.5.5 运行的副本。我没有使用 postgresql 恢复数据库,而是使用了 django 的 dumpdata/loaddata。错误很少。不得不 TRUNCATE CASCADE 'django-content-types. Django-form-designer 在迁移 0008 期间抛出错误。删除了迁移文件中的一行(第 34 行):db.delete_column('form_designer_formlog', 'data'),如 github.com/samluescher/django-form-designer/issues/51 中所述。接下来要升级到 django 1.6。
    • 使用 dumpdata/loaddata 是额外的痛苦。我肯定更喜欢先使用数据库的副本,只是为了消除可能出错的更复杂的步骤。
    • 像 loaddata 一样,通过 postgres 恢复数据库也会抛出错误。尝试启动并运行更新已经一个多星期了。 2.4.3 和 3.0 之间的变化太多了。我在 Django 1.7.10 上运行 Django-cms 3.0.15。加载数据出现以下错误:TypeError: Problem installed fixture '/ebs/djangocms30/localdealsmagazine/dumpOct21.json': get_db_prep_value() got an unexpected keyword argument 'connection'
    猜你喜欢
    • 2014-04-08
    • 1970-01-01
    • 2018-10-13
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    相关资源
    最近更新 更多