【问题标题】:Added/updated pages in wrong place in Django CMS 3.0 (mptt) article tree using postgres使用 postgres 在 Django CMS 3.0 (mptt) 文章树中的错误位置添加/更新页面
【发布时间】:2016-01-21 22:01:20
【问题描述】:

对于https://developer.ubuntu.com,我们使用 Django CMS 3.0.6 (mptt),我们对此非常满意。

最近我们为我们添加了从项目的 bzr 分支导入 markdown 文档的功能,因此每当我们感兴趣的一些上游项目发生变化时,我们可以让 cronjobs 为我们更新文章。我花了一些时间才完成它,但我们让它工作。在本地,我使用 sqlite(默认)并且很高兴。将其部署到登台后,导入也可以正常工作,但是由脚本添加或更新的文章最终位于文章树中的不同位置。一段时间后,我可以使用本地 postgres 安装来重现此问题。

我们目前正在这里跟踪问题:https://bugs.launchpad.net/developer-ubuntu-com/+bug/1506861

我有点迷茫,不知道如何调试。

我为此编写了一个测试用例,它基本上是:

$ bzr branch lp:~developer-ubuntu-com-dev/developer-ubuntu-com/debug-md-importer
$ cd debug-md-importer
$ virtualenv ./env
$ ./env/bin/pip install -r requirements.txt
$ ./env/bin/pip install django psycopg2

然后将 http://pastebin.ubuntu.com/12798510/ 之类的差异应用到 developer_portal/settings.py 并运行

$ sudo apt install python-pip python-dev libpq-dev postgresql postgresql-contrib
$ sudo -u postgres psql -c "CREATE USER developerportal_user WITH PASSWORD '123abc';"

要查看实际问题,然后运行:

$ ./postgres-retry.sh

在 postgres 设置中和

$ ./sqlite-retry.sh

在 sqlite 设置中。

脚本将从头开始创建一个新的数据库,运行带有调试消息的导入器并为您运行 runserver,因此您可以轻松地在页面列表中查看结构如何更改。

目前的情况: sqlite 做得很好,而 postgres 的文章树搞砸了。

这个问题的所有相关代码都可以在 developer_portal/management/commands/import-external-docs-branches.py 中找到

如果有人能给我指点,将不胜感激。

非常感谢。

祝你有美好的一天, 丹尼尔

【问题讨论】:

  • 如果你不使用bzr,你也可以在这里获取示例分支的内容:daniel.holba.ch/temp/debug-md-importer.tar.xz
  • 很遗憾您将架构包装成两层工具。也许如果您还提供了数据库转储,更多人可以查看它。 (在我看来,这可能是一个简单的 DBA 东西,因为这是你的第一个端口)
  • 分支中包含数据库转储?或者它缺少什么? “第一个端口”是什么意思?你能详细说明一下吗?
  • 数据库转储,如:pg_dump -U user_name database_name >dumpfile.dmp
  • 嗯...这可以通过上面的说明轻松复制,因此无论是使用默认 Django+Django CMS 设置的默认安装还是实际的 developer.uc 似乎都无关紧要生产主机。上面的说明应该可以为您提供一个工作数据库,并可以显示实际问题。

标签: django postgresql django-cms


【解决方案1】:

我从http://bazaar.launchpad.net/~developer-ubuntu-com-dev/developer-ubuntu-com/debug-md-importer/view/head:/requirements.txt#L18 看到您使用的是 django CMS 3.0.6,这意味着您使用的是 Django MPTT。

一般来说,人们在使用 django CMS 时遇到的大多数树问题都证明是移动后的损坏,与 Django MPTT 有关。

如果您还没有这样做,您可以尝试以下方法之一:

  • 不要使用django-mptt==0.6.1 尝试最新版本的https://github.com/django-mptt/django-mptt
  • 我没有机会运行您的进程,但如果可能,请尝试在每次操作后运行 manage.py cms fix-mptt 命令
  • 在 django CMS 3.1 中,我们开始使用 Treebeard 而不是 MPTT。如果您能够尝试使用 3.1 而不是 3.0.x 而无需太多额外的工作,那可能是一个有用的实验。

【讨论】:

  • 非常感谢。我会试试看。
  • 初步测试表明manage.py cms fix-mptt 在这方面确实有帮助。在我们切换到更新的 Django CMS treebeard 之前,我将弄清楚如何将其嵌入到我们的流程中。非常感谢您的帮助!
  • 这看起来很不错。我为我们的团队提出了一个合并提案,以便在暂存中进行审查和测试——我会让你知道它是如何进行的。再次感谢!
猜你喜欢
  • 2011-04-22
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
  • 2016-04-02
  • 2015-08-12
  • 2013-10-06
  • 2022-08-04
相关资源
最近更新 更多