wagtail pathoverflow при добавлении новой дочерней страницы - PullRequest
0 голосов
/ 13 января 2019

Я разработал сайт трясогузки, и он прекрасно работает. Это просто простой блог. Я смог добавить страницу индекса блога и посты блога под ними. При наведении указателя мыши при попытке добавить новую страницу выдается ошибка. PathOverflow at /admin/pages/add/blog/blogpage/8/

Сильфон - полный след.

Environment:


Request Method: POST
Request URL: https://vikatakavi.info/admin/pages/add/blog/blogpage/8/

Django Version: 2.1.5
Python Version: 3.5.2
Installed Applications:
['home',
 'search',
 'wagtail.contrib.forms',
 'wagtail.contrib.redirects',
 'wagtail.embeds',
 'wagtail.sites',
 'wagtail.users',
 'wagtail.snippets',
 'wagtail.documents',
 'wagtail.images',
 'wagtail.search',
 'wagtail.admin',
 'wagtail.core',
 'modelcluster',
 'taggit',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sitemaps',
 'blog']
Installed Middleware:
['django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'wagtail.core.middleware.SiteMiddleware',
 'wagtail.contrib.redirects.middleware.RedirectMiddleware']



Traceback:

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  44.         response = view_func(request, *args, **kwargs)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/wagtail/admin/urls/__init__.py" in wrapper
  102.             return view_func(request, *args, **kwargs)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/wagtail/admin/decorators.py" in decorated_view
  34.             return view_func(request, *args, **kwargs)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/wagtail/admin/views/pages.py" in create
  224.             parent_page.add_child(instance=page)

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/treebeard/mp_tree.py" in add_child
  1013.         return MP_AddChildHandler(self, **kwargs).process()

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/treebeard/mp_tree.py" in process
  387.             newobj.path = self.node.get_last_child()._inc_path()

File "/home/ubuntu/projects/blogger/env/lib/python3.5/site-packages/treebeard/mp_tree.py" in _inc_path
  1114.             raise PathOverflow(_("Path Overflow from: '%s'" % (self.path, )))

Exception Type: PathOverflow at /admin/pages/add/blog/blogpage/8/
Exception Value: Path Overflow from: '000100010005ZZZZ'

Я абсолютно невежественен в этом.

1 Ответ

0 голосов
/ 13 января 2019

Чтобы сохранить положение страницы в дереве страниц, Wagtail использует технику, названную Materialized Path , которая (в стандартных настройках) позволяет максимум 1679615 вставок в определенную точку дерева. Кажется, вы как-то достигли этого предела. (Положение в каждой точке дерева представляется в виде 4-значного буквенно-цифрового кода; «ZZZZ», как видно из сообщения об ошибке, является самым высоким доступным кодом.)

Вы бы столкнулись с этим ограничением, если бы у вас было> 1,6 миллиона постов в блоге, но, очевидно, это маловероятно. Более вероятная возможность состоит в том, что вы написали скрипт импорта или обслуживания, который выполняет очень большое количество вставок или перемещений страниц - например, если у вас был сценарий для случайного изменения порядка страниц, и вы выполняли его в разделе с 10000 страниц, у вас закончились бы индексные числа после запуска ~ 160 раз.

Если вы действительно не можете избежать превышения этого лимита, то вы можете увеличить его до 60 миллионов, добавив следующий код где-нибудь, где он будет запускаться при запуске:

from wagtail.core.models import Page
Page.steplen = 5

Однако это не будет работать в существующей базе данных - вам нужно будет удалить и воссоздать вашу базу данных после внесения этого изменения - и это означает, что максимально возможная глубина дерева уменьшена с 63 уровней до 50.

...