Symfony2 - 混淆缓存清除尝试写入pro_

时间:2013-08-15 13:07:43

标签: symfony console

我的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(再次)中访问缓存文件。

查看缓存文件夹,我可以看到缓存\ prod下存在__CG__AcmeDemoBundleEntityFoo.php,但现在有一个带注释和会话子文件夹的pro_文件夹。

发生了什么,如何让Symfony忘记pro_,以便它可以重新使用prod来解决所有问题?

我认为与缓存有关的一切都存储在缓存文件夹下......是否有其他东西(某处)存储了对pro_的一些引用?或者我是否在寻找解决此问题的错误位置?

修改:再进行一些搜索,appProdProjectContainer.php包含16个.../cache/pro_的引用。如果我手动搜索并将这些替换为.../cache/prod,则该网站可以正常运行。但下次我运行console cache:clear时会将其重置为pro_。这种错误的行为可能来自哪里?

Edit2:好的,我已经深入了解并向Symfony核心提交了一个PR来尝试修复它。问题是由我们的缓存路径包含'\'字符引起的,这些字符随后在缓存文件中被转义,并且无法匹配用于清理它们的搜索/替换命令。

2 个答案:

答案 0 :(得分:2)

app/console cache:clear --env=prod --no-warmup
composer dump-autoload -o
app/console cache:warmup --env=prod

答案 1 :(得分:1)

这是Symfony处理缓存路径时出现反斜杠的错误。

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

从长期来看,有一个修补程序发布为https://github.com/symfony/symfony/pull/9184,很快就会被纳入核心代码。