我有一个非常奇怪的错误。
我在一台机器上有两个vhost:分段和制作。
它们位于/ var / www / staging /和/ var / www / production /中。我通过Capifony(capistrano的symfony2扩展)部署我的Symfony2项目,因此web目录位于/ var / www / staging / current / web /
当我在控制器中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/
不知何故,当加载Object时,它切换到登台环境,而不是生产(两个不同的发布文件夹只是因为生产和登台之间有不同的版本)。
这是由于自动加载吗? vhosts中的配置错误?
以下是我的两个vhosts
<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 :(得分:1)
问题是APC。
在app.php中我有
$loader = new ApcClassLoader('sf', $loader);
导致apc操作码条目中的重叠问题(dixit我们的sysadmin)。
修复很简单:
$loader = new ApcClassLoader($_SERVER['HTTP_HOST'], $loader);