我迫使一个非常奇怪的问题,因为我被迫将一些我的symfony2应用程序移动到一个使用Ubuntu 14.04和Apache2 2.4.7的新服务器。
在同一台服务器上有4个不同的symfony2应用程序,配置有虚拟主机。每个都有自己的域,系统中的帐户和配置。
发生的奇怪事情是,一旦我重新启动apache2服务器(或重新加载配置),这4个站点中只有一个会起作用,这将是第一个在浏览器中输入的站点。所有其他页面都会产生这种错误:
[Tue Sep 09 10:30:27.437009 2014] [:error] [pid 16400] [client XXX.XXX.XXX.XXX:44531] PHP Fatal error: Class 'Avalanche\\Bundle\\ImagineBundle\\AvalancheImagineBundle' not found in /home/user1/project/app/AppKernel.php on line 27
或
[Tue Sep 09 10:41:47.794413 2014] [:error] [pid 16398] [client XXX.XXX.XXX.XXX:44947] PHP Fatal error: Class 'Project2\\CoreBundle\\Project2Bundle' not found in /home/user2/project2/app/AppKernel.php on line 19
非常奇怪的是,它只发生在apache2重启/重新加载后作为第一个访问过的所有网站。
我认为所有网站都有一个适当的虚拟主机配置:
<VirtualHost *:80>
ServerAdmin me@server.com
ServerName project1.nl
ServerAlias www.project1.nl
DocumentRoot "/home/user1/project1/web"
DirectoryIndex app.php
<Directory "/home/user1/project1/web">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/project1-error.log
CustomLog ${APACHE_LOG_DIR}/project1-access.log combined
</VirtualHost>
有没有人知道从哪里开始寻找?我已经检查了虚拟主机的多种配置,php-fpm配置,每个应用程序的配置,但我找不到出路。
答案 0 :(得分:1)
这是xcache的问题(http://xcache.lighttpd.net/ticket/337) 设置opcache.optimization_level = 0为我解决了这个问题。
答案 1 :(得分:0)
这是我们的vhost设置之一,适用于sf2
ServerName demo.example.fr
ServerAlias demo.example.fr
ServerAdmin admin@example.fr
DocumentRoot /var/www/vhosts/demo.example.fr/httpdocs/web/
<Directory /var/www/vhosts/demo.example.fr/httpdocs/web/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /app.php [QSA,L]
</IfModule>
</Directory>
就像你会注意到的那样,我们不设置目录索引,只使用mod_rewrite重写url
答案 2 :(得分:0)
您的配置中有一些内容。
在Apache 2.4中,您必须使用 + 或 - 来定义选项。
Options -Indexes +FollowSymLinks +MultiViews
您不需要DirectoryIndex,因为它已在您的.htaccess
文件中重写。
我希望您使用a2ensite
启用了所有配置,否则不会加载所有其他vhost文件。
接下来要清除完整的Symfony2缓存文件夹并清除APC缓存(如果使用它)。有时候APC会缓存一些对象而你会遇到一些奇怪的错误。
答案 3 :(得分:0)
在升级到Ubuntu 14.04和Apache 2.4.7之后,我花了两天时间试图弄清楚这个完全相同的问题。
为我解决的是禁用xcache,因为它缓存了在php app / console cache之后调用的第一个应用程序的文件:clear或php composer.phar更新导致有时获得应用程序A,有时候应用程序B.
我想通过在应用程序A的各个步骤中添加var_dump指令来尝试调试symfony2。当我进入$ kernel-&gt; handle()(从app.php调用)时,我无法获得任何输出不管我怎么做。我怀疑应用程序B的AppKernel被调用但是当我尝试修改它时,它没有改变结果。这是当我意识到文件被缓存到某处的时候。我没有注意到这一点因为我没有安装apc但显然启用了xcache。
我想这个问题出现是因为symfony2应用程序中的命名空间和类名完全相同...
我将尝试查看是否可以为xcache添加每个应用程序的前缀,以了解它们是不同的。
TLDR:禁用xcache,因为使用apache2的原始配置,它无法区分两个应用程序并混合缓存。