VirtualHost重新声明课程

时间:2014-11-08 23:33:29

标签: apache symfony

我在ArchLinux x86_64上使用Apache 2.4.10

我有许多虚拟主机(对于每个项目),具有以下模板

<VirtualHost *:80>
    DocumentRoot $TMPL_DIRECTORY

        <Directory $TMPL_DIRECTORY>
                Options Indexes FollowSymLinks Includes
                AllowOverride All
                Require all granted
        </Directory>

    ServerName $TMPL_NAME
    ErrorLog "/var/log/httpd/${TMPL_NAME}-error_log"
    CustomLog "/var/log/httpd/${TMPL_NAME}-access_log" common
</VirtualHost>

其中$TMPL_DIRECTORY是项目网站目录的路径,TMPL_NAME是网址

将url追加到我的hosts文件后工作正常

现在我有两个项目

  • project1.symfony.local(/ home / rkmax / Development / project1)
  • project2.symfony.local(/ home / rkmax / Development / project2)

我在项目1中工作,当我切换到project2时总是出现错误

FatalErrorException: Error: Cannot redeclare class Doctrine\Common\Annotations\Annotation\Target in /home/rkmax/Development/project1/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/Annotation/Target.php line 31

我无法理解为什么从 project1 读取该文件我必须重新启动apache并且一切正常再次

更新

我启用了以下php扩展

  • APC
  • apcu
  • 了XCache
  • XCache Cacher
  • Xdebug的
  • Zend OPcache

1 个答案:

答案 0 :(得分:0)

远射,但我认为可能如下:

在您使用web/app.php的两个应用程序的ApcClassLoader中。 ApcClassLoader获取缓存前缀。代码看起来像这样。

$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);

现在,作为per the documentation,如果您在同一台服务器上运行同一应用程序的不同实例,则必须至少更改其中一个的前缀。

因此,web/app.php文件中的代码应如下所示:

// in the first instance
$loader = new ApcClassLoader('sf2_app1', $loader);
$loader->register(true);

// in the second instance
$loader = new ApcClassLoader('sf2_app2', $loader);
$loader->register(true);

当然,如果您正在使用它进行部署,请不要忘记在web/app.php.dist中执行相同操作。

之后,再次重启Apache,以确保刷新缓存的web / app.php文件(如果您使用带有stat=0的APC)。