2

我有一个非常奇怪的错误。

我在一台机器上有两个虚拟主机:登台和生产。

它们位于 /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()(来自食谱),它使用__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>
4

1 回答 1

1

问题是 APC。

在 app.php 我有

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

这导致了 apc 操作码条目中的重叠问题(dixit 我们的系统管理员)。

修复很简单:

    $loader = new ApcClassLoader($_SERVER['HTTP_HOST'], $loader);
于 2013-04-24T09:09:06.947 回答