2013-04-24 18 views
2

我有一個非常奇怪的錯誤。加載的類來自錯誤的目錄

我在一臺機器上有兩個虛擬主機:分段和生產。

它們位於/ var/www/staging /和/ var/www/production /中。我部署通過Capifony我的Symfony2項目(斯特拉努的Symfony2的擴展名),所以Web目錄是在/ var/WWW /分期/電流/網絡/

當我echo __DIR__在我的控制,我得到

/var/www/production/releases/20130424075147/src/Acme/DemoBundle/Controller 

這是正確的。但是,如果我現在得到的實體從它的存儲庫(例如)

$object = $this->getDoctrine()->getManager()->getRepository('AcmeDemoBundle:Object')->findOneById(1); 

,做echo $object->getUploadRootDir()(從the cookbook),它使用__DIR__我突然得到

/var/www/staging/releases/20130424075333/src/Acme/DemoBundle/Entity/../../../../web/upload/ 

不知何故,在加載對象時,它切換到暫存環境而不是生產(兩個不同的發佈文件夾僅僅是因爲生產和臨時存在不同版本)。

這是由於自動加載?虛擬主機中的配置錯誤?

下面是我的兩個虛擬主機

<VirtualHost *:80> 
    DocumentRoot "/var/www/production/current/web" 
    ServerName example.com 
    ServerAlias www.example.com example.com 
    SetEnv  SYMFONY_ENV prod 
    SetEnv  SYMFONY_DEBUG 0 

    <Directory /var/www/production/current/web> 
     RewriteEngine On 

     RewriteCond %{HTTP_HOST} !^www\. 
     RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ app.php [QSA,L] 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/var/www/staging/current/web" 
    ServerName staging.example.com 
    ServerAlias staging.example.com 
    SetEnv  SYMFONY_ENV dev 
    SetEnv  SYMFONY_DEBUG 1 

    <Directory /var/www/staging/current/web> 
     RewriteEngine On 
     RewriteCond %{REQUEST_FILENAME} !-f 
     RewriteRule ^(.*)$ app.php [QSA,L] 
    </Directory> 
</VirtualHost> 
+0

來些緩存?或學說引用...?還是Symfony/Doctrine配置...?我想你只是從分期複製粘貼到生產中,或者你使用任何版本控制工具(如Git,SVN,...)? – shadyyx 2013-04-24 08:53:46

+0

我正在使用Git和Capistrano進行部署。我們的系統管理員幫我解決問題,會發布答案。 – Bram 2013-04-24 09:05:26

回答

1

問題是APC。

在app.php我有

$loader = new ApcClassLoader('sf', $loader); 

造成在APC操作碼條目(迪克希特我們的系統管理員)重疊的問題。

的修復很簡單:

$loader = new ApcClassLoader($_SERVER['HTTP_HOST'], $loader); 
相關問題