2013-04-24 25 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);