Symfony 5.2安装symfony/mailer时cache:clear报错致项目无法运行
问题根因
这个报错和symfony/mailer组件本身没有关系,核心触发原因是项目存放在Dropbox同步目录下:Dropbox的文件锁、同步占位机制会干扰Symfony服务容器的编译流程。composer require执行时会自动触发cache:clear步骤重新编译服务容器,这个过程中Dropbox刚好锁定、截断了正在生成的getVarDumper_ContextualizedCliDumper_InnerService.php文件,导致容器文件缺失,最终加载失败,连带所有依赖容器的功能(maker-bundle、开发服务、控制台命令)全部瘫痪。
修复步骤
- 手动清理损坏的缓存
当前项目的服务容器已经损坏,自动执行cache:clear会直接报错,需要手动删除项目路径下var/cache、var/log两个目录的全部残留文件,之后执行composer dump-autoload重新生成类加载映射。 - 从根源规避Dropbox的文件干扰
任选一种方案处理即可:- 将整个项目从Dropbox同步目录(当前路径为
C:\Users\Javi\Dropbox\DAW\GeoSport)移动到非同步的本地磁盘路径,比如C:\dev\GeoSport,从根源避免文件锁冲突 - 如果必须保留Dropbox目录同步,就在Dropbox客户端中将项目下的
var、vendor两个目录设置为不同步、仅本地保留,禁止Dropbox扫描、读写这两个动态生成的目录
- 将整个项目从Dropbox同步目录(当前路径为
- 重新完成组件安装
先手动执行php bin/console cache:clear确认无报错,再重新执行composer require symfony/mailer完成组件安装,最后启动symfony server:start验证所有功能恢复正常。
踩坑提醒
Symfony的var/cache、var/log属于高频动态读写的临时目录,放在云同步目录下本身就极易触发缓存损坏。哪怕暂时修复了这次报错,后续只要在服务容器编译时遇到同步锁,还是会出现同类文件缺失的问题,不建议把整个项目直接放在云同步目录下运行。
内容的提问来源于stack exchange,提问作者Salram
相关产品推荐
相关产品推荐

