3

我的 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 以尝试修复它。问题是由于我们的缓存路径包含“\”字符,然后在缓存文件中转义,并且无法匹配旨在清理它们的搜索/替换命令。

4

2 回答 2

2
app/console cache:clear --env=prod --no-warmup
composer dump-autoload -o
app/console cache:warmup --env=prod
于 2013-08-15T18:12:15.117 回答
1

这是 Symfony 处理带有反斜杠的缓存路径中的一个错误。

短期的解决方法是用正斜杠替换它们。

从长远来看,有一个发布为https://github.com/symfony/symfony/pull/9184的修复程序,它将很快被引入核心代码。

于 2013-10-02T10:36:50.930 回答