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