1

今天我遇到了一个非常奇怪的情况。我将我的应用程序的多个环境用于不同的目的(已知的环境:dev、qa、prod;和 devftp,我用来通过 FTP 保存文件并立即在线检查更改,其他环境具有 SVN 配置)。

问题是由于某种原因环境变得混乱,它以前发生在我身上,但并没有给它太大的重要性(有一次我删除了一个实体列,尽管我在应用程序上绝对没有引用该列,但我'有一个 ReflectionException 错误,我在没有使用它的情况下重新添加了该列,几周后我再次删除它而没有任何问题)。特别是一个错误是,在 devftp 我已经声明了一项服务,而开发人员告诉我“未找到服务”。这是来自 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 文件夹中的开发环境会从 devftp 文件夹中调用某些东西?

这发生在 qa 和 dev 之间,也发生在 qa 和 devftp 之间。(我已经从 CLI 和删除整个文件夹中多次清理了缓存(dev 和 prod))。重要的是,这只发生在 prod env 上,使用 app_dev.php 效果很好。

有任何想法吗?

4

1 回答 1

3

在我看来,您似乎对所有环境都使用了相同的 APC 密钥(您称它们为发行版,但实际上这是环境)。

尝试为您的环境设置不同的 APC 密钥:

$loader = new ApcUniversalClassLoader('aks_dev');

或者

$loader = new ApcUniversalClassLoader('aks_test');

或者

$loader = new ApcUniversalClassLoader('aks_qa');

等等。

于 2012-09-10T19:59:23.057 回答