【问题标题】:Attempted to call function "apcu_fetch" from namespace "Doctrine\Common\Cache"试图从命名空间“Doctrine\Common\Cache”调用函数“apcu_fetch”
【发布时间】:2018-04-30 09:01:04
【问题描述】:

我正在使用 symfony 3 和 angular 5 开发一个应用程序。我的系统是 windows 10,我使用的是 php7.2

一切都通过 dev_mode 完成,但是当我打开生产模式时,我遇到了这个错误:

致命错误:未捕获 Symfony\Component\Debug\Exception\UndefinedFunctionException: 试图从命名空间调用函数“apcu_fetch” “学说\通用\缓存”。

如何安装 apcu?

【问题讨论】:

  • 你能分享你的 config_prod.yml 文件吗?

标签: angular symfony angular5 apc php-7.2


【解决方案1】:

对于 PHP 7.x,Symfony 似乎已经删除了默认 config_prod.yml 中的框架(验证和序列化程序)缓存配置,并保留了 ORM 缓存,但使用 apc 而不是像以前那样使用 apcu。我在此更改之前开始的在 PHP 7.1.12 上运行的项目中看到了相同的问题。

我确实设法通过安装 APCU 并修改 Symfony prod 配置来运行它,但我倾向于像 Symfony 在这个上所做的那样。如果您仍在考虑使用 APCU 以及序列化和验证器缓存:

如果未安装,请将其安装在服务器上(这会因服务器而异,但有其他文章对此进行了解释):

pecl install apcu && echo "extension=apcu.so" > /usr/local/etc/php/conf.d/apcu.ini

然后在您的services.yml 中添加以下内容以配置验证器缓存:

services:
    doctrine.cache.apcu:
        class: Doctrine\Common\Cache\ApcuCache

    validator.mapping.cache.doctrine.apcu:
        class: Symfony\Component\Validator\Mapping\Cache\DoctrineCache
        arguments: ['@doctrine.cache.apcu']

然后在你的 config_prod.yml 中使用它:

framework:
    validation:
        cache: validator.mapping.cache.doctrine.apcu
    serializer:
        cache: doctrine.cache.apcu

doctrine:
    orm:
        metadata_cache_driver: apcu
        query_cache_driver: apcu
        result_cache_driver: apcu

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2016-11-07
    相关资源
    最近更新 更多