You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行drush updb后S3存储桶Image Style文件夹丢失求助(S3fs模块)

问题:S3fs模块环境下执行drush updb后S3存储桶Image Style文件夹丢失

问题背景

在使用S3fs模块的Drupal环境中,执行drush updb(数据库更新)命令后,S3存储桶内的Image Style文件夹及其中的图片全部丢失。

操作流程

  • 将UAT环境的Drupal从8.3版本升级至8.9版本
  • 关联最新的生产环境脱敏数据库
  • 执行drush updb命令
  • 命令执行成功后,发现生产环境S3存储桶中Image Style文件夹内的图片丢失

原因分析

核心问题出在Drupal 8.4+版本引入的Image Style清理逻辑与S3fs模块的兼容性冲突:当drush updb执行时,会触发image.path.flush钩子,这个钩子原本设计用于清理本地文件系统的Image Style缓存,但S3fs模块在处理该钩子时,错误地直接删除了S3存储桶中对应的Image Style文件夹,而非仅清理过时的缓存文件。

解决方案

1. 恢复丢失的图片

  • 若有S3存储桶备份,直接从备份恢复Image Style文件夹
  • 无备份的话,执行drush image-flush --all命令,系统会重新为所有原始图片生成对应样式的缩略图并同步到S3

2. 避免后续执行drush updb时重复丢失

  • 临时补丁法:找到S3fs模块中处理image.path.flush或s3fs_file_delete的相关代码,注释掉直接删除S3文件夹的逻辑,改成仅清理过时缓存文件(可参考Drupal社区相关问题的修复思路)
  • 模块启停法:执行drush updb前先卸载S3fs模块:drush pm-uninstall s3fs -y,完成更新后重新安装配置:drush pm-install s3fs -y,再同步Image Style缓存
  • 跳过特定更新:如果明确是某个数据库更新项触发的问题,执行drush updb --skip=更新项ID跳过该更新

3. 长期规避方案

  • 升级S3fs模块到最新稳定版本,新版本一般已修复此类兼容性问题
  • 保持Drupal核心与模块版本匹配,跨大版本升级前先确认各模块的兼容情况

内容的提问来源于stack exchange,提问作者Sunil Kansodiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:15:04