7

当我向我的一个实体添加一列并将其发布以用于生产时,我遇到了这个问题,我必须重新启动 Apache 以清除 Doctrine 元数据 APC/APCU 缓存。

我已经尝试了以下所有命令,但没有一个对我有用:

php -r "apc_clear_cache();"
php -r "apcu_clear_cache();"

sudo php app/console doctrine:cache:clear-metadata
sudo php app/console doctrine:cache:clear-query
sudo php app/console doctrine:cache:clear-result

我收到了 --env=prod 的错误消息

sudo php app/console doctrine:cache:clear-metadata  --env=prod
sudo php app/console doctrine:cache:clear-query  --env=prod
sudo php app/console doctrine:cache:clear-result --env=prod

 [LogicException]
  Cannot clear APC Cache from Console, its share in the Web server memory and not accessible from the CLI.

我可以让它刷新 Doctrine 缓存的唯一方法是重新启动我的 apache 服务器,这有时可能是一个问题。

我在 Symfony 项目中对 Doctine 的缓存设置:

doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc
        second_level_cache:
            enabled: true
            log_enabled: false
            region_cache_driver: apc

在这种情况下,如何在每次将新模式更新发布到生产环境时不重新启动 Apache 来清除 APC 缓存。如果负载均衡器后面有许多服务器,情况会更糟。

4

4 回答 4

7

您必须了解,在 Apache(或 Nginx)下运行的 Php 与通过命令行运行的 Php 不同,它们是两个无法通信的 Linux 进程。

所以,即使你可以通过 CLI 清除缓存,也不会影响 Apache 下的 php。

它在 Symfony 控制器内部调用的最简单方法apcu_clear_cache,或者,您可以通过 CLI 使用 Apache Php 套接字。

我建议使用像http://gordalina.github.io/cachetool/这样的工具,它可以完美地做到这一点。

于 2017-11-08T19:37:56.457 回答
2

与其尝试从控制台清除它,不如尝试从控制器或 app.php 中清除它。

我在 app.php 中注释了这一行:

//apcu_clear_cache ();

当我确实需要清除缓存时,我只是取消注释并加载任何页面。这个对我有用。

于 2016-10-11T18:49:50.280 回答
1

当你运行 apc_clear_cache(); 不是来自 cli,而是来自您的应用程序,学说缓存将被清除。您可以在管理面板中创建一些按钮,或者在每次更新指定文件后向您的服务器发送 curl 请求,例如:

http://example.com/apc_cache_clear.php

内部自动请求并清除缓存

于 2017-03-01T14:56:45.900 回答
0

看一下Smart-Core/AcceleratorCacheBundle提供从 CLI 清除 PHP 加速器缓存的命令。

这可以允许将缓存作为 cli 命令刷新为:

php app/console cache:accelerator:clear

该文档还包括 Capifony 的食谱。

希望这有帮助

于 2016-10-11T19:28:01.937 回答