当我在其中一个实体中添加一列并将其发布以用于生产时,我不得不重新启动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.
我可以刷新刷新缓存的唯一方法是重新启动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
在这种情况下,如何在每次将新的架构更新发布到生产环境时清除APC缓存而无需重新启动Apache。如果您在负载均衡器后面有许多服务器,则情况甚至更糟。
最佳答案
您必须了解,在Apache(或Nginx)下运行的Php与通过命令行运行的Php不同,它们是2个无法通信的Linux进程。
因此,即使您可以通过CLI清除缓存,也不会影响Apache下的php。
它是在Symfony Controller 中调用apcu_clear_cache
的最简单方法,或者,您可以通过CLI使用Apache Php套接字。
我建议使用像http://gordalina.github.io/cachetool/这样的工具,可以很好地完成此任务。
关于symfony - 如何清除Doctrine APC缓存以进行生产?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39981501/