2012-09-08 36 views
1

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

事情是由于某种原因,环境变得混乱起来,它发生在我之前,但并没有给它太多的重要性(有一次我删除了一个实体列,尽管我绝对没有参考该列在应用程序中,我有一个ReflectionException错误,我重新添加了列而没有使用它,几个星期后,我再次删除它没有任何问题)。其中一个特别的错误是,在devftp中,我声明了一个服务,dev正在告诉我“未找到服务”。这是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 

你可以看到开发文件夹#1如何调用#0上devftp文件夹。 dev没有boot()方法,devftp确实会调用aks.fs.尽管这就是为什么生活在dev文件夹中的开发环境是从devftp文件夹调用某些东西?

这发生在qa和dev之间,qa和devftp之间。 (我已经清除了缓存(dev和prod)几次,都是从CLI和删除整个文件夹)。 重要的是要说这只发生在prod env上,使用app_dev.php完美无缺。

任何想法?

+0

你使用APC吗? –

+0

是的,它的配置类似于http://symfony.com/doc/current/book/performance.html。你认为它可能与它有关? – ikleiman

+0

我认为一开始你可以关闭它。如果它有帮助 - 我可以给你一个提示,如何为不同的环境定制不同的APC密钥 –

回答

3

对我来说,它看起来像你使用相同的APC的关键所有环境(你称他们的版本,但实际上这是环境)。

尝试建立不同的APC键为您的环境:

$loader = new ApcUniversalClassLoader('aks_dev'); 

$loader = new ApcUniversalClassLoader('aks_test'); 

$loader = new ApcUniversalClassLoader('aks_qa'); 

等。

+0

杜!现在我懂了!我正在用$ loader = new ApcUniversalClassLoader('sf2.apc。')调用每一个。就像在这个例子中一样,不用更改密钥。谢谢! – ikleiman