如何正确清除与capistrano的php apccaching

我们正在使用capistrano来部署我们的PHP应用程序。 并在生产服务器上启用了php-apc,apc.stat = 0.在capistranoconfiguration中,有一个规则可以在部署后清除apccaching:update:

after "deploy:update", "clear_apc_cache" 

caching成功清除:apc.php'查看主机统计'显示0分钟的正常运行时间,caching的文件数量和命中接近0(不是0,因为有相当多的stream量和一些文件caching之前,我们可以检查apc.php)

问题是,有时旧文件仍然被caching在apc中。 我认为这是由于在capistrano更新“当前”符号链接之前启动的HTTP请求,在我们清除apccaching后结束。 在这种情况下,在这个请求中apc清除之后包含的文件仍然来自旧的修订文件夹(我们在include中使用相对path并且需要 s)并保存在apccaching中

有没有办法来永久解决这个问题? 没有更新所有包括和要求

现在我会尽量延迟“clear_apc_cache”一两秒钟,但是恐怕在延迟期间会引起别人的问题(有些请求还可能超过2秒)

这个答案表明你需要传递一个参数给clear_apc_cache ,只有apc.enable_cli=1 ,APCcaching清除才能通过CLI调用工作。

您可能需要使用after:restart hook再次clear_apc_cache ,以确保完全清除以前的版本。