Drush更新Drupal 7核心静默失败且仅部分完成?原因排查
Drush升级Drupal 7核心后版本未更新的排查与解决方法
我之前在把Drupal 7从7.56升级到7.58时,也碰到过完全一样的糟心情况:Drush明明提示Project drupal was updated successfully. Installed version is now 7.58.,但实际只更了几个文件,版本号根本没变化,drush status输出和升级前一模一样。折腾了一番后,总结出几个亲测有效的解决步骤:
1. 先彻底清理缓存,排除缓存干扰
Drush和Drupal的缓存很容易导致版本显示“滞后”,先把缓存清干净:
- 执行Drush缓存清理命令:
drush cache-clear all - 再清理Drush自身的缓存:
drush cc drush - 也可以手动删除
sites/default/files/cache目录下的所有文件,确保静态缓存也被清空
2. 检查文件权限,确保Drush有写入权限
大部分时候这个问题都是权限不足导致的:Drush没有足够权限覆盖所有核心文件,只能更新少数可写入的文件。
- 先确认Web服务器用户(比如
www-data、apache)对Drupal根目录及所有核心文件拥有写入权限 - 可以临时调整权限:
chmod -R 755 /path/to/your/drupal,或者用chown把目录所有权改为Web服务器用户(升级完成后记得改回安全权限)
3. 强制重新下载并覆盖核心文件
不要用默认的升级命令,直接强制下载完整的7.58核心包并覆盖现有文件:
drush dl drupal-7.58 --replace
这个命令会绕过Drush的增量更新逻辑,直接下载完整的核心文件并强制替换,能解决大部分“部分更新”的问题。下载完成后,建议再执行drush updatedb(虽然Drupal 7小版本升级通常不需要数据库更新,但保险起见),然后再用drush status验证版本。
4. 检查是否有自定义修改的核心文件
如果你之前修改过Drupal核心文件(非常不推荐这种做法!),Drush会自动跳过这些文件,避免覆盖你的自定义修改。
- 可以用
drush status查看核心是否有改动提示,或者用Git(如果用Git管理代码)执行git status,看看哪些核心文件被修改过 - 先备份这些修改过的文件,然后手动替换成7.58版本的对应文件,再手动合并你的自定义修改
5. 用更准确的方式验证真实版本
有时候drush status显示的是缓存中的旧版本,你可以通过以下方式确认真实版本:
- 直接查看Drupal核心目录下的
includes/bootstrap.inc文件,找到define('VERSION', '7.58');这一行,这里的版本号是最准确的 - 登录Drupal后台,进入配置 > 状态报告页面,这里显示的版本也是真实的运行版本
我当时的问题就是服务器权限不足,Drush没法覆盖核心文件,用强制下载命令加权限调整后就彻底解决了。
内容的提问来源于stack exchange,提问作者ajmedway
相关产品推荐
相关产品推荐

