【问题标题】:Symfony2 "FatalErrorException: Compile Error: Cannot redeclare class" from time to timeSymfony2“FatalErrorException:编译错误:无法重新声明类”时不时
【发布时间】:2014-01-12 04:44:02
【问题描述】:

今天我遇到了一个非常奇怪的情况。我正在 Doctrine Symfony2 中的两个实体之间实现一个简单的 1:m 关系。

有用户和组。每个用户都应该被添加到一个组中。

但是每 3-4 次重新加载我的控制器就会吐出一个错误。

FatalErrorException: Compile Error: Cannot redeclare class Proxies\__CG__\Creativebrains\AthleteBundle\Entity\Group in /var/www/symfony2/app/cache/dev/doctrine/orm/Proxies/__CG__CreativebrainsAthleteBundleEntityGroup.php line 8

稍后重新加载,我得到了正常的 JSON 输出

{
    id: 1,
    username: "dominik",
    email: "dominik@creativebrains.net",
    enabled: true,
    displayname: "Dominik",
    group: {
        name: "asd"
        ...
    }
}

我认为这是某种缓存错误,但我不明白为什么。

希望有人知道答案。 祝你有美好的一天!

【问题讨论】:

  • 核对缓存:来自项目根目录的rm -rf app/cache/*
  • 您好,谢谢,但我已经尝试过几次了。我现在有一个理论认为是 Vagrant/NFS 造成了损害。当我将缓存文件夹移动到 /tmp/ 时,它似乎可以工作。我会进一步研究它并让你更新。祝你有美好的一天。
  • 是的,我在 MacBook 上使用 vagrant/nfs 时也遇到过问题。我必须用rm -rf 核对缓存,然后从 VAGRANT BOX 运行php app/console cache:clear -e=prod -n。大声笑我必须强调,因为从本地终端运行它会做一些奇怪的事情。我想我还必须在 AppKernel 和控制台中将 umask 设置为 0000。
  • 我也一直被这个错误困扰。我没有使用任何奇怪的东西,比如 Vagrant 或 NFS,只是 nginx + php-fpm。我已将问题追溯到 APC。似乎任何时候两个同时请求都有某种竞争条件创建这些缓存文件。每当发生这种情况时,我都会重新启动 php-fpm,一切都很好。不确定我们如何解决它,但关闭 APC 可以防止它发生。

标签: php symfony doctrine-orm fatal-error


【解决方案1】:

问题与 APC 操作码缓存有关。正如您所描述的,我一直在经历它,它似乎最常发生在多个同时请求中。禁用 APC 可以解决问题,但并不理想。您可以通过将其添加到您的 php.ini 文件来仅为这些生成的代理禁用它:

apc.filters = '-.*__CG__.*'

这解决了我的问题。这只是开发环境中的一个问题,因此不应该在生产环境中使用。

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多