私は本当に本当に奇妙なバグを抱えています。
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>