如何清除Doctrine APC缓存以进行生产?

时间:2016-10-11 15:53:06

标签: symfony caching doctrine-orm apc apcu

当我向我的某个实体添加一个列并将其发布用于生产时,我遇到了这个问题我必须重新启动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缓存。如果负载均衡器后面有许多服务器,情况会更糟。

4 个答案:

答案 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的食谱。

希望这个帮助