2012-09-08 33 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