Drupal 9.2.15升级至9.3.15后无法访问/admin/modules等管理路径
Drupal 9.2.15升级9.3.15后后台路由报错修复
问题原因
这是Drupal 9.3版本调整User模块路由结构导致的典型升级兼容问题,报错里提到的两个路由在9.3版本里都做了调整:
user.admin_permissions.module已废弃,原模块权限筛选功能整合到了user.admin_permissions主路由下user.role.settings路由标识变更,旧标识不再注册到路由表
触发场景只有三种:路由缓存没清干净、安装了不兼容9.3版本的模块(硬编码引用旧路由)、升级过程中核心文件缺损。
修复步骤
按顺序操作,每做完一步就访问报错页面验证,不用全跑完:
- 强制重建路由缓存
哪怕你之前跑过drush updb,只要没单独重建路由缓存就可能出这个问题,依次执行命令:
要是Drush命令也报错,直接删drush cr drush ev '\Drupal::service("router.builder")->rebuild();'sites/default/files/php/目录下所有内容,再访问站点会自动触发缓存重建。 - 升级不兼容的贡献模块/修复自定义模块
清缓存还报错的话,90%的情况是你装的Admin Toolbar模块版本低于3.1.0,这个版本之前的模块硬编码了两个旧路由,直接执行命令升级即可:
如果不是Admin Toolbar的问题,直接在代码目录全局搜两个旧路由字符串,定位到引用的文件:composer require drupal/admin_toolbar:^3.1 drush cr
找到对应自定义模块/贡献模块的引用位置,把旧路由替换成9.3对应的新路由即可:grep -r "user.admin_permissions.module" modules/ grep -r "user.role.settings" modules/- 引用
user.admin_permissions.module的地方替换为user.admin_permissions - 引用
user.role.settings的地方替换为对应功能的新路由user.role_list
- 引用
- 修复缺损的核心文件
以上操作都无效的话,就是升级时核心路由文件没更新到位,执行scaffold命令重新拉取核心静态文件:composer drupal:scaffold drush cr
验证
修复完成后访问/admin/modules、/admin/people两个路径,页面正常加载、无500错误即为修复完成。
内容的提问来源于stack exchange,提问作者Mat
相关产品推荐
相关产品推荐

