我们正在使用 capistrano 来部署我们的 PHP 应用程序。并且在生产服务器上启用了 php-apc,其中 apc.stat = 0。在 capistrano 配置中有一条规则是在 deploy:update 之后清除 apc 缓存:
after "deploy:update", "clear_apc_cache"
缓存已成功清除:apc.php“查看主机统计信息”显示正常运行时间为 0 分钟,缓存文件数和命中数接近于 0(不是 0,因为流量很大,并且在我们检查 apc.php 之前一些文件已被缓存)
问题是,有时旧文件仍缓存在 apc 中。我认为这是由于 HTTP 请求在 capistrano 更新“当前”符号链接之前开始,并在我们清除 apc 缓存之后结束。在这种情况下,此请求中 apc clear 之后包含的文件仍然来自旧修订文件夹(我们在 include 中使用相对路径并要求s) 并保存在 apc 缓存中
有没有办法永久修复此问题?无需更新所有包含并要求是吗?
现在我会尝试将“clear_apc_cache”延迟一到两秒,但我担心在延迟期间会导致其他问题(并且某些请求仍可能超过 2 秒)
答案1
这个答案指出您需要传递一个参数,clear_apc_cache
并且只有apc.enable_cli=1
通过 CLI 调用,APC 缓存清除才能工作。
您可能需要clear_apc_cache
再次使用after:restart
钩子来确保之前的版本已被完全清除。