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
相关产品推荐
相关产品推荐

