我的 Symfony 安装似乎在某个地方感到困惑(可能在缓存清除失败期间)。似乎认为应该调用生产缓存文件夹pro_
而不是prod
.
首先,当我尝试运行时,$ php console cache:clear --env=prod
我收到了错误消息:
[Symfony\Component\Filesystem\Exception\IOException]
Cannot rename "...cache/pro_" to "...cache/pro_".
我在 Windows 开发机器上运行(因此没有文件系统权限问题)。
cache/*
因此,我尝试手动删除所有文件/文件夹并重试。这次 cache:clear 完成并生成了一个prod
文件夹。该文件夹包含注释、资产、学说、会话和树枝的子文件夹。
但是当我打开 prod 前端控制器(例如http://devsite/
在浏览器中)时,它会失败并显示以下消息:
Fatal error: require() [function.require]:
Failed opening required '...cache/pro_/doctrine/orm/Proxies\__CG__AcmeDemoBundleEntityFoo.php'
(include_path='blah, blah, blah')
in ...\vendor\doctrine\common\lib\Doctrine\Common\Proxy\AbstractProxyFactory.php on line 165
从这个外观来看,它试图访问 pro_ 而不是 prod 中的缓存文件(再次)。
查看缓存文件夹,我可以看到它__CG__AcmeDemoBundleEntityFoo.php
存在于 cache\prod 下,但现在有一个 pro_ 文件夹,其中包含注释和会话子文件夹。
发生了什么事,我如何让 Symfony 忘记它,pro_
以便它可以重新使用prod
一切?
我认为与缓存有关的所有内容都存储在缓存文件夹下......是否还有其他东西(某处)正在存储一些参考pro_
?还是我在错误的地方寻找解决此问题的方法?
编辑:进行了更多搜索,并appProdProjectContainer.php
包含 16 个对.../cache/pro_
. 如果我手动搜索并将这些替换为.../cache/prod
网站作品。但是下次我运行console cache:clear
它会将它们重置回pro_
. 这种错误行为可能来自哪里?
Edit2:好的,我已经查明真相并向 Symfony 核心提交了 PR 以尝试修复它。问题是由于我们的缓存路径包含“\”字符,然后在缓存文件中转义,并且无法匹配旨在清理它们的搜索/替换命令。