Рейтинг:0

Что делать с сообщением «Обнаружена рекурсивная перестройка маршрутизатора». ошибка исключения

флаг ke

Я часто вижу сбой установки и удаления модуля с ошибкой

Uncaught PHP Exception RuntimeException: «Обнаружена рекурсивная перестройка маршрутизатора». в /path/to/drupal/web/core/lib/Drupal/Core/Routing/RouteBuilder.php строка 121

Похоже, основная проблема заключается в том, что что-то идет не так, и способ обработки ошибки пытается получить информацию о маршрутизаторе, которая уже изменяется.

Является ли тот факт, что он создает это фатальное исключение WSOD, основной ошибкой? Или это одна из тех вещей, когда они всегда перекладывают ответственность на то, что вызвало первоначальную ошибку? Есть ли хороший способ диагностировать эти проблемы?

Он оставляет модули наполовину установленными, например, с зарегистрированными типами сущностей, но без схемы. Это не здорово.

Пример ошибки:

Сайт обнаружил непредвиденную ошибку. Пожалуйста, повторите попытку позже.

RuntimeException: обнаружена рекурсивная перестройка маршрутизатора. в Drupal\Core\Routing\RouteBuilder->rebuild() (строка 121 файла core/lib/Drupal/Core/Routing/RouteBuilder.php).
Drupal\Core\ProxyClass\Routing\RouteBuilder->rebuild() (строка: 67)
Drupal\Core\Routing\RouteProviderLazyBuilder->getRouteProvider() (строка: 104)
Drupal\Core\Routing\RouteProviderLazyBuilder->getRoutesByPattern() (строка: 115)
Drupal\devel\EntityTypeInfo->getPathParts() (строка: 100)
Drupal\devel\EntityTypeInfo->setEntityTypeLinkTemplate() (строка: 75)
Drupal\devel\EntityTypeInfo->entityTypeAlter() (строка: 94)
devel_entity_type_alter() (строка: 539)
Drupal\Core\Extension\ModuleHandler->alter() (Строка: 334)
Drupal\Core\Plugin\DefaultPluginManager->alterDefinitions() (строка: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (строка: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (строка: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (строка: 136)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (строка: 257)
Drupal\Core\Entity\EntityTypeManager->getHandler() (строка: 196)
Drupal\Core\Entity\EntityTypeManager->getStorage() (строка: 497)
Drupal\Core\Entity\EntityBase::loadMultiple() (строка: 19)
Drupal\ggroup\Routing\SubgroupRouteProvider->getRoutes()
call_user_func() (строка: 146)
Drupal\Core\Routing\RouteBuilder->rebuild() (строка: 83)
Drupal\Core\ProxyClass\Routing\RouteBuilder->rebuild() (строка: 67)
Drupal\Core\Routing\RouteProviderLazyBuilder->getRouteProvider() (строка: 104)
Drupal\Core\Routing\RouteProviderLazyBuilder->getRoutesByPattern() (строка: 115)
Drupal\devel\EntityTypeInfo->getPathParts() (строка: 100)
Drupal\devel\EntityTypeInfo->setEntityTypeLinkTemplate() (строка: 75)
Drupal\devel\EntityTypeInfo->entityTypeAlter() (строка: 94)
devel_entity_type_alter() (строка: 539)
Drupal\Core\Extension\ModuleHandler->alter() (Строка: 334)
Drupal\Core\Plugin\DefaultPluginManager->alterDefinitions() (строка: 127)
Drupal\Core\Entity\EntityTypeManager->findDefinitions() (строка: 175)
Drupal\Core\Plugin\DefaultPluginManager->getDefinitions() (строка: 22)
Drupal\Core\Plugin\DefaultPluginManager->getDefinition() (строка: 136)
Drupal\Core\Entity\EntityTypeManager->getDefinition() (строка: 257)
Drupal\Core\Entity\EntityTypeManager->getHandler() (строка: 196)
Drupal\Core\Entity\EntityTypeManager->getStorage() (строка: 247)
Drupal\views\EventSubscriber\ViewsEntitySchemaSubscriber->onEntityTypeDelete() (строка: 51)
Drupal\views\EventSubscriber\ViewsEntitySchemaSubscriber->onEntityTypeEvent()
call_user_func() (строка: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (строка: 145)
Drupal\Core\Entity\EntityTypeListener->onEntityTypeDelete() (Строка: 167)
Drupal\Core\Entity\EntityDefinitionUpdateManager->uninstallEntityType() (строка: 490)
Drupal\Core\Extension\ModuleInstaller->uninstall() (строка: 91)
Drupal\Core\ProxyClass\Extension\ModuleInstaller->uninstall() (строка: 174)
Drupal\system\Form\ModulesUninstallConfirmForm->submitForm()
call_user_func_array() (строка: 114)
Drupal\Core\Form\FormSubmitter->executeSubmitHandlers() (строка: 52)
Drupal\Core\Form\FormSubmitter->doSubmitForm() (строка: 592)
Drupal\Core\Form\FormBuilder->processForm() (строка: 320)
Drupal\Core\Form\FormBuilder->buildForm() (строка: 73)
Drupal\Core\Controller\FormController->getContentResult()
call_user_func_array() (строка: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (строка: 564)
Drupal\Core\Render\Renderer->executeInRenderContext() (строка: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext() (строка: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (строка: 158)
Symfony\Component\HttpKernel\HttpKernel->handleRaw() (строка: 80)
Symfony\Component\HttpKernel\HttpKernel->handle() (строка: 58)
Drupal\Core\StackMiddleware\Session->handle() (строка: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle() (строка: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass() (строка: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle() (строка: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (строка: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (строка: 23)
Stack\StackedHttpKernel->handle() (строка: 708)
Drupal\Core\DrupalKernel->handle() (строка: 19)
4uk4 avatar
флаг cn
Можете ли вы опубликовать полное сообщение об ошибке с трассировкой стека?
флаг ke
Вы можете видеть такие ошибки, как [#2351353](https://www.drupal.org/project/drupal/issues/2351353) и [#2930715](https://www.drupal.org/project/drupal/issues /2930715), что другие проблемы вызывают исходную ошибку. Предположительно, это было «исправлено», мне просто интересно, как люди обычно с этим справляются.
флаг cn
Похоже, что ошибка вызывается модулем разработки (по крайней мере, на этой итерации) — можете ли вы удалить этот модуль или вы просто попадаете в тот же цикл?
4uk4 avatar
флаг cn
Две упомянутые проблемы — одна очень ранняя основная ошибка из 2014 года и одна из модуля contrib из 2017 года, обе исправлены. В вашем случае виновником является модуль разработки, однако `Drupal\devel\EntityTypeInfo->getPathParts` дважды вызывает перестроение маршрута. И это вызвано тем, что два разных модуля Ggroup и Views вызываются по какому-то несчастливому стечению обстоятельств, когда разработчики несколько раз меняют хук.
флаг ke
должен ли RouteProviderLazyBuilder установить свой собственный флаг перестроения, прежде чем он попытается выполнить перестроение?
флаг ke
ха, я удалил devel и теперь получаю Symfony\Component\Routing\Exception\RouteNotFoundException: Маршрут "devel.admin_settings" не существует. в Drupal\Core\Routing\RouteProvider->getRouteByName() (строка 206 core/lib/Drupal/Core/Routing/RouteProvider.php).
4uk4 avatar
флаг cn
Тот факт, что построитель маршрутов запускается через ленивый прокси-класс, не имеет значения. Я бы сначала избавился от Ggroup. На мой взгляд, этот модуль не работает с Devel. Он пытается получить маршруты из сущностей, для которых информация о типе сущностей еще не обнаружена, а devel подключается к обнаружению типа сущностей, чтобы сделать свое дело до того, как маршруты будут построены.
miststudent2011 avatar
флаг fr
Случайно ли вы применили патч из выпуска [#2726209](https://www.drupal.org/project/devel/issues/2726209#comment-13573873), если да, удалите патч и повторите попытку. Скорее всего, это решит вашу проблему.
флаг ke
Хм. Я использовал этот патч, но удалил его из композитора в дополнение к добавлению некоторых хаков в RouteProviderLazyBuilder. Слишком много изменений сразу. Кажется, что удаления этого патча само по себе достаточно. Я думаю, что Девелю нужно что-то добавить, чтобы предотвратить это.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.