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

Symfony 1.4 维护模式下清除缓存失败问题咨询

问题根因

Symfony 1.4 的project:disable命令会在站点data/目录下生成对应「应用+环境」的.lck锁文件,这套检测逻辑不仅对Web请求生效,CLI命令执行时也会触发校验。你清理缓存时先处理了未被禁用的backend应用,处理到已禁用的frontend2应用时触发了锁校验,直接输出维护页HTML中断了清理流程。

可用解决方案

方案1:直接手动删除缓存目录(最推荐,无侵入)

symfony cc命令的本质就是删除站点缓存目录下的所有文件,你可以直接用系统命令删除,完全不会触发维护模式校验:

sudo rm -rf /var/www/smc/cache/*

执行完成后再按原有流程退出维护模式即可。

方案2:调整部署步骤顺序

如果你的部署流程中没有必须在维护模式下执行的、依赖新代码的操作,可以把缓存清理步骤放到开启维护模式之前:

  • 拉取最新代码
  • 执行./symfony cc清理全量缓存(此时未开启维护模式,无校验问题)
  • 执行./symfony project:disable切换为维护模式
  • 执行其他部署操作
  • 执行./symfony project:enable恢复站点访问

方案3:分阶段清理缓存

你可以先清理未被禁用的应用缓存,等退出维护模式后再补全剩余应用的缓存清理:

# 先清理未禁用的backend应用缓存
sudo ./symfony cc --app=backend --env=prod
# 完成其他部署步骤后恢复所有应用访问
sudo ./symfony project:enable prod koba frontend2 api api2
# 全量清理所有应用缓存
sudo ./symfony cc

方案4:修改框架逻辑跳过CLI维护模式校验(长期使用可选)

如果经常需要在维护模式下执行CLI命令,可以修改Symfony 1.4核心的维护模式校验逻辑,跳过CLI场景的检测:
找到框架中校验.lck锁文件的逻辑段,新增CLI请求判断:

// 仅Web请求执行维护模式校验,CLI请求直接跳过
if (sfConfig::get('sf_cli')) {
  return;
}

修改后Web访问依然会正常返回维护页,所有CLI命令都不会被维护模式拦截。


内容的提问来源于stack exchange,提问作者Geoff Maddock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:27:00