今天我遇到了一个非常奇怪的情况。我使用我的app的几个环境用于不同的目的(已知的:dev,qa,prod;和devftp,我用它来通过FTP保存文件并立即在线检查更改,其他的有SVN配置)。
由于某些原因,环境变得混乱,它发生在我之前,但没有给它太多的重要性(有一次我删除了一个实体专栏,尽管我绝对没有提到该专栏应用程序我有一个ReflectionException错误,我重新添加了列而不使用它,几周后我再次删除它没有任何问题)。特别是一个错误是在devftp中我声明了一个服务而dev正在告诉我“Service Not Found”。这是来自nginx错误日志:
2012/09/07 06:33:16 [error] 3327#0: *9 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException' with message 'You have requested a non-existent service "aks.fs".' in XXXX/dev/app/bootstrap.php.cache:202
Stack trace:
#0 XXXX/devftp/src/AKS/XXBundle/AKSXXBundle.php(18): Symfony\Component\DependencyInjection\Container->get('aks.fs')
#1 XXXX/dev/app/bootstrap.php.cache(521): AKS\XXBundle\AKSXXBundle->boot()
#2 XXXX/dev/app/bootstrap.php.cache(548): Symfony\Component\HttpKernel\Kernel->boot()
#3 XXXX/dev/web/app.php(13): Symfony\Component\HttpKernel\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request))
#4 {main}
thrown in XXXX/dev/app/bootstrap.php.cache on line 202" while reading response header from upstream, client: XXXX, server: dev.XXXX.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "dev.XXXX.com"
"dev.XXXX.com.error.log" 509L, 72936C
您可以看到dev文件夹上的#1如何在devftp文件夹上调用#0。 dev没有boot()方法,devftp会调用aks.fs.尽管如此,为什么dev文件夹中的dev环境是从devftp文件夹调用的东西?
这发生在qa和dev之间,以及qa和devftp之间。 (我已经多次从CLI清除缓存(dev和prod)并删除整个文件夹)。 重要的是要说这只发生在prod env上,使用app_dev.php是完美的。
有什么想法吗?
答案 0 :(得分:3)
对我来说,看起来你在所有环境中使用相同的APC密钥(你称之为发布版本,但实际上这就是环境)。
尝试为您的环境设置不同的APC密钥:
$loader = new ApcUniversalClassLoader('aks_dev');
或
$loader = new ApcUniversalClassLoader('aks_test');
或
$loader = new ApcUniversalClassLoader('aks_qa');
等等。