мы используем capistrano для развертывания нашего PHP-приложения. и php-apc включен на производственном сервере с apc.stat = 0. В конфигурации capistrano есть правило для очистки кеша apc после развертывания: update:
after "deploy:update", "clear_apc_cache"
кеш успешно очищен: apc.php 'View Host Stats' показывает время безотказной работы 0 минут, количество кэшированных файлов и обращений близко к 0 (не 0, потому что существует довольно большой трафик и некоторые файлы кэшируются до того, как мы сможем проверьте apc.php)
проблема в том, что иногда старый файл все еще кэшируется в apc. Я думаю, это связано с тем, что HTTP-запрос начинается до того, как capistrano обновляет «текущую» символическую ссылку и заканчивается после очистки кеша apc. в этом случае файл, включенный после apc clear в этом запросе, все еще находится из старой папки ревизии (мы используем относительный путь в includes и требуютs) и сохраняются в кеше apc
Есть ли способ исправить это навсегда? без обновления все включаютs и требуютс?
на данный момент я попытаюсь отложить "clear_apc_cache" на одну или две секунды, но я боюсь, что это вызовет другие проблемы во время задержки (а некоторые запросы все еще могут быть длиннее 2 секунд)
Этот ответ заявляет, что вам нужно передать аргумент clear_apc_cache
и это только с apc.enable_cli=1
будет ли очистка кэша APC работать через вызовы CLI.
Вы можете захотеть clear_apc_cache
снова с after:restart
крючок, чтобы убедиться, что предыдущий выпуск полностью очищен.