Drupal 8.3.5升级至8.5.1遇错:故障排查方向指引
Drupal 8.3.5 → 8.5.1 升级故障排查指南
看起来你已经搞定了大部分前置工作:代码库更新、Composer配置模块、Drush 9升级,本地基础运行也没问题,现在卡在生产数据库迁移后的升级环节。我给你梳理几个核心排查方向,一步步来定位问题:
1. 数据库迁移后的基础对齐检查
- 先确认生产数据库是完整同步到开发环境的:如果是手动导入,确保没漏掉任何表;如果用Drush同步,优先用
drush sql-sync @prod @dev(配置好远程别名的前提下)避免数据遗漏。 - 执行
drush sql-query "SELECT name, schema_version FROM key_value WHERE collection='system.schema';",对比每个模块的schema版本和代码库中模块的实际版本。要是某个模块代码已经升级,但数据库里的schema版本还是旧的,后续drush updb大概率会出问题。
2. 严格遵循升级流程顺序
很多人会搞反顺序导致冲突,正确步骤应该是:
- 把更新后的代码库部署到开发环境
- 导入生产数据库
- 立即运行
drush updb -v(加-v查看详细日志)执行数据库更新 - 紧接着执行
drush cr all彻底清空所有缓存
要是跳过缓存重建,或者先跑升级再导数据库,很容易出现代码与数据库状态不匹配的错误。
3. Drush 9与环境的兼容性验证
- 虽然Drupal 8.5.x支持Drush 9,但部分老 contrib 模块可能存在兼容性问题。试试用
drush updb -vvv(更详细的日志模式)运行,看命令行输出里的具体错误栈;或者用drush watchdog:show --count=20查看Drupal系统日志,里面会记录更精准的报错信息,比如哪个模块抛出了异常。 - 确认Drush 9的安装路径:用
which drush和drush --version检查,确保你当前用的是通过cgr安装的那版,避免DevDesktop自带的旧版Drush干扰。
4. 模块/主题的版本适配检查
- 用
composer show | grep drupal/列出所有 contrib 模块,逐个核对Drupal.org上的版本支持:比如有些模块在8.3.x能用,但8.5.x需要升级到特定版本(像Views、Token这类常用模块,在8.5.x有明确的版本要求)。 - 扫描自定义模块/主题的代码:检查有没有使用Drupal 8.3.x的废弃API(比如某些hook、函数或服务),到8.5.x已经被移除。可以用
drush coder:review(先安装Coder模块)来自动化扫描这类问题。
5. Acquia DevDesktop 环境特殊排查
- 确认PHP版本:Drupal 8.5.x要求PHP 7.0及以上,DevDesktop2里可以切换PHP版本,优先用7.1或7.2(稳定性更好)。
- 手动清理文件缓存:有时候DevDesktop的缓存机制比较顽固,直接删除
sites/default/files/cache文件夹下的所有内容,再跑drush cr,能解决一些奇怪的缓存冲突问题。 - 检查文件权限:确保
sites/default/files和modules/themes目录权限正确,DevDesktop有时候会因为权限问题导致模块无法加载或数据库更新失败。
6. 数据库权限与字符集验证
- 确认开发环境的数据库用户拥有足够权限:
ALTER、CREATE TABLE、INDEX这些权限是drush updb必须的,要是权限不足,会导致表结构更新失败。 - 核对字符集:生产库和开发库的字符集要保持一致(建议都是
utf8mb4),字符编码不一致可能会导致数据迁移后出现乱码或SQL错误。
最后提醒:如果以上步骤没找到问题,一定要抓具体的错误信息——比如浏览器打开网站时的详细报错(在settings.php里设置$config['system.logging']['error_level'] = 'verbose';开启详细错误显示),或者Drush命令的报错输出,这些具体信息是定位问题的关键。
内容的提问来源于stack exchange,提问作者Erik Vecchione
相关产品推荐
相关产品推荐

