同一主机中多个symfony2项目的ClassNotFoundException

时间:2014-01-31 12:36:02

标签: symfony virtualhost

我在我公司的服务器上运行了一个symfony2项目(Debian用于生产,Ubuntu用于开发)。我们想在同一台服务器上托管另一个symfony2网站,我们希望将两个项目分开,因为它们彼此不相关并使用不同的CSS样式。

我已经定义了两个虚拟主机,其子域指向每个项目的文件夹,但我不能让两个站点一起运行。它只运行我在浏览器中加载的第一个,第二个显示此错误: ClassNotFoundException:尝试从/var/www/promociones/app/AppKernel.php第19行的命名空间“RecAicrag \ PromocionesBundle”加载类“RecAicragPromocionesBundle”。您是否需要从另一个命名空间“使用”它?

我首先加载哪一个并不重要,第二个显示错误。我认为在某处有共享配置,但我找不到如何解决它。而且我也找不到任何如何在同一主机中托管两个项目的例子。

如果我可以有两种不同的配置和CSS样式,我可以考虑将两个站点保留在同一个项目中,但我更愿意将它们保存在不同的位置。

我的apache conf:

<VirtualHost *:80>
        ServerAdmin carlos@xxx.com
        ServerName localhost
        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
        ServerAdmin carlos@xxx.com
        ServerName intranet.localhost
        DocumentRoot /var/www/intranet/web/
        <Directory /var/www/intranet/web/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>
<VirtualHost *:80>
  ServerName promociones.localhost
  ServerAdmin carlos@xxx.com
  DocumentRoot /var/www/promociones/web/
  <Directory /var/www/promociones/web/>
        RewriteEngine On
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
  </Directory>
</VirtualHost>

第一个项目: 应用程序/配置/ routing.yml中

xxx_intranet:
    resource: "@XxxIntranetBundle/Resources/config/routing.yml"
    prefix:   /

的src /.../资源/配置/ routing.yml中

intranet_consultas:
    pattern: /consultas
    defaults: { _controller: XxxIntranetBundle:Generico\Consultas:index }

intranet_consulta_articulo:
    pattern: /consultas/articulo/{codigo}
    defaults: { _controller: XxxIntranetBundle:Generico\Consultas:articulo }

......

xxx_intranet_Annotations:
    resource: "@XxxIntranetBundle/Controller/"
    prefix:   /
    type:     annotation

第二(新): 应用程序/配置/ routing.yml中

rec_xxx_promociones:
    resource: "@RecXxxPromocionesBundle/Resources/config/routing.yml"
    prefix:   /

的src /.../资源/配置/ routing.yml中

rec_xxx_promociones_homepage:
    pattern:  /hello/{name}
    defaults: { _controller: RecXxxPromocionesBundle:Default:index }

我尝试在routing.yml中设置“host”参数,但没有任何反应,仍然是相同的。

1 个答案:

答案 0 :(得分:2)

您的服务器上是否启用了APC?

如果你这样做,这可能就是问题所在。 Symfony在APC中存储类缓存,默认情况下具有相同的密钥名称。

这意味着重新启动Apache后访问的第一个应用程序是填充类高速缓存的应用程序。然后第二个应用程序将尝试使用相同的类缓存,并且会非常可怕地破坏。

您应该能够将类缓存名称更改为特定于应用程序 - 我相信它位于app / autoload.php中 - 这应该可以解决您的问题。如果没有,那么回帖:)