如何清除用于生产的 Doctrine APC 缓存?
How to clear Doctrine APC cache for production?
当我向我的一个实体添加一列并将其发布用于生产时,我遇到了这个问题我必须重新启动 Apache 以清除 Doctrine 元数据 APC/APCU 缓存。
我已经尝试了下面的所有命令,但 none 对我有用:
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 缓存。如果负载均衡器后面有很多服务器,情况会更糟。
与其尝试从控制台清除它,不如尝试从控制器或 app.php。
我在 app.php 中评论了这一行:
//apcu_clear_cache ();
当我确实需要清除缓存时,我只是取消注释并加载任何页面。对我有用。
查看 Smart-Core/AcceleratorCacheBundle 提供命令以从 CLI 清除 PHP 加速器缓存。
这可以允许将缓存作为 cli 命令刷新为:
php app/console cache:accelerator:clear
该文档还包括 Capifony 的食谱。
希望对您有所帮助
当你 运行 apc_clear_cache();不是来自 cli,而是来自您的应用程序,学说缓存将被清除。您可以在管理面板中制作一些按钮,或者在每次更新指定文件后向您的服务器发送 curl 请求,例如:
http://example.com/apc_cache_clear.php
内部自动请求并清除缓存
你必须明白Apache(或Nginx)下的Php 运行和命令行下的Php 运行是不一样的,它们是2Linux 无法通信的进程。
因此,即使您可以通过CLI 清除缓存,这也不会影响Apache 下的php。
最简单的方法是在 Symfony 控制器中调用 apcu_clear_cache
,或者,您可以通过 CLI 使用 Apache Php 套接字。
我建议使用像 http://gordalina.github.io/cachetool/ 这样的工具,它可以完美地做到这一点。
当我向我的一个实体添加一列并将其发布用于生产时,我遇到了这个问题我必须重新启动 Apache 以清除 Doctrine 元数据 APC/APCU 缓存。
我已经尝试了下面的所有命令,但 none 对我有用:
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 缓存。如果负载均衡器后面有很多服务器,情况会更糟。
与其尝试从控制台清除它,不如尝试从控制器或 app.php。
我在 app.php 中评论了这一行:
//apcu_clear_cache ();
当我确实需要清除缓存时,我只是取消注释并加载任何页面。对我有用。
查看 Smart-Core/AcceleratorCacheBundle 提供命令以从 CLI 清除 PHP 加速器缓存。
这可以允许将缓存作为 cli 命令刷新为:
php app/console cache:accelerator:clear
该文档还包括 Capifony 的食谱。
希望对您有所帮助
当你 运行 apc_clear_cache();不是来自 cli,而是来自您的应用程序,学说缓存将被清除。您可以在管理面板中制作一些按钮,或者在每次更新指定文件后向您的服务器发送 curl 请求,例如:
http://example.com/apc_cache_clear.php
内部自动请求并清除缓存
你必须明白Apache(或Nginx)下的Php 运行和命令行下的Php 运行是不一样的,它们是2Linux 无法通信的进程。
因此,即使您可以通过CLI 清除缓存,这也不会影响Apache 下的php。
最简单的方法是在 Symfony 控制器中调用 apcu_clear_cache
,或者,您可以通过 CLI 使用 Apache Php 套接字。
我建议使用像 http://gordalina.github.io/cachetool/ 这样的工具,它可以完美地做到这一点。