【问题标题】:ClassNotFoundException on multiple symfony2 projects in the same host同一主机中多个 symfony2 项目的 ClassNotFoundException
【发布时间】:2014-01-31 12:36:02
【问题描述】:

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

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

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

如果我可以有两种不同的配置和 CSS 样式,我可以考虑将这两个网站放在同一个项目中,但我更愿意将它们放在不同的地方。

我的 apache 配置文件:

<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>

第一个项目: app/config/routing.yml

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

src/.../Resources/config/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

第二个(新): app/config/routing.yml

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

src/.../Resources/config/routing.yml

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

我尝试在 routing.yml 中设置“host”参数,但没有任何反应,还是一样。

【问题讨论】:

  • routing.yml中显示路线
  • 我在第一个项目中添加了一些路线。有很多,都具有相同的格式。第二个项目还没有路由,只有默认的一个

标签: symfony virtualhost


【解决方案1】:

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

如果你这样做了,这很可能是问题所在。 Symfony 在 APC 中存储了一个类缓存,默认情况下具有相同的键名。

这意味着无论您在重新启动 Apache 后访问的第一个应用程序是哪个应用程序,都会填充类缓存。然后第二个应用程序将尝试使用相同的类缓存,并且会严重中断。

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

【讨论】:

  • 我使用的是 Xcache 而不是 APC,但你让我找到了正确的方向。我替换了 Xcache,现在我在两个 app.php 文件中使用具有不同前缀的 APC。现在我可以浏览两个网站了!谢谢!
猜你喜欢
  • 2021-11-09
  • 2014-02-15
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多