2

私は本当に本当に奇妙なバグを抱えています。

1 台のマシンにステージングと本番の 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);

そして do echo $object->getUploadRootDir()(クックブックから) を使用し__DIR__ます。

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

どういうわけか、オブジェクトをロードするときに、本番環境ではなくステージング環境に切り替えました (2 つの異なるリリース フォルダーは、本番環境とステージングの間に異なるリリースがあるためです)。

これはオートローディングによるものですか?仮想ホストの構成エラーですか?

以下は私の2つの仮想ホストです

<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 オペコード エントリで重複する問題が発生しました (システム管理者をディキシットします)。

修正は簡単でした:

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