Symfony ESI缓存/代理侦听器问题


Symfony ESI Cache / Surrogate Listener Issue

我有一个已经部署到Ubuntu 14.04服务器上的产品,它在app_dev中工作得很好。然而,当我在应用程序中运行它时,它会出现503错误,在应用程序日志文件中显示如下:

我有一个完全相同的代码在流浪汉设置,相同的操作系统版本,它在应用程序和app_dev工作良好

以前有人遇到过这个吗?

Symfony 2.7.0/Ubuntu 14.04/Distro PHP/mySQL -尝试清除缓存,重新安装所有的编写器包。

[2015-06-09 16:36:43]请求。信息:匹配的路由"fos_user_security_login"。{" route_parameters ":{"_controller":"控制器"丛书' UserBundle ' ' SecurityController: loginAction"、"_route":"fos_user_security_login"},"request_uri":"http://xxxx/app.php/login"}[] [2015-06-09 16:36:43]安全。填充TokenStorage with一个匿名令牌。[] [] [2015-06-09 16:36:43]请求。临界:未捕获的PHP异常Symfony '组件'调试' ' ContextErrorException异常:"明显致命错误:参数1传递给Symfony组件' ' HttpKernel ' EventListener ' SurrogateListener:: __construct ()一定是的一个实例Symfony'Component'HttpKernel'HttpCache'SurrogateInterface,实例Symfony'Component'HttpKernel'HttpCache'Esi给定,调用/var/www/xxx/app/cache/prod/appprodprojectcontainer .php第557行定义为at/var/www/xxxx/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/SurrogateListener.php第33行{"exception":"[object]组件(Symfony ' '调试'例外' ContextErrorException(代码:0):可捕获的致命错误:参数1传递给Symfony组件' ' HttpKernel ' EventListener ' SurrogateListener:: __construct ()一定是的一个实例Symfony组件' ' HttpKernel ' HttpCache ' SurrogateInterface,实例Symfony'Component'HttpKernel'HttpCache'Esi给定在/var/www/xxxx/app/cache/prod/appProdProjectContainer.php中调用第557行,定义为/var/www/xxxx/vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/SurrogateListener.php: 33)"}[]

(对于那些建议代码格式化日志行的人来说,它将它们格式化为单行,这基本上意味着必须滚动它们才能阅读它们,这比上面更糟糕)

sigh -总是这样。你花半个小时试图解决它,然后你把问题放在SO上,在2分钟内你自己解决了!

考虑流浪设置之间的设置差异是,活动框有超过1个项目活动,然后BINGO!我想起来了。

应用程序环境使用APC来缓存类,是的,两个项目都有相同的APC缓存键!

一个快速的键更改和缓存重建和它的全部修复!

我想我应该回答这个问题,以防其他人有类似的问题。

更新:

app.php的一个调整....

// As APC requires a unique key prefix, we'll use the directory above     web, which will be unique.
$curdir = pathinfo(getcwd());
$curdir = basename($curdir['dirname']);
$loader = new ApcClassLoader($curdir . '_', $loader);
$loader->register(true);

这使用cwd(通常是apache的doc根目录)上面的文件夹作为前缀键,只要它们是唯一的(应该是),那么多个缓存就不会冲突。