Повторная проверка opcache только после git push

Я использую PHP с OPcache. Я только git-push to master, чтобы развернуть мой веб-сайт в производстве (не совсем, это только после юнит-тестов, но не берите в голову). В php.ini файл, настройки OPcache о "времени" и "частоте". Но я просто хочу сбросить кэш после git pull на моем сервере.

Так что я думаю, что мне просто нужно позвонить opcache_reset после git-pull на моем производственном сервере и установки opcache.validate_timestamps в 0 (никогда не сбрасывать кеш)

Я ничего не читал об этом, поэтому сомневаюсь: не знаю, хорошая ли это практика. Я что-то пропустил? Есть ли риск или все в порядке?

Большое спасибо!

PS: я использую PHP-фреймворк и композитор (composer install работает сразу после мерзавца)

1 ответ

Решение

Чтобы получить максимальную выгоду от OPCache, вы должны отключить opcache.validate_timestamps, Если вы впоследствии позвоните opcache_reset() Из сценария каждый раз, когда вы развертываете свой код на сервере, ваш OPCache очищается один раз для каждого нового набора файлов, и система не тратит ресурсы на постоянную проверку файлов.

Однако есть пара "ошибок":

Прежде всего, убедитесь, что звонок на opcache_reset() произойдет, иначе вы запустите старый код. Если у вас есть сценарий для выполнения развертывания, убедитесь, что он не работает громко, если этот шаг не выполняется.

Во-вторых, в зависимости от того, как именно работает PHP (mod_php против php-fpm), вам может потребоваться выполнить opcache_reset() Функция через запрос к браузеру, а не через командную строку. Например, наиболее очевидным решением для очистки кэша является наличие простого файла PHP, подобного следующему

<?php

if (php_sapi() != "cli") die("Not accessible from web");
opcache_clear();

и выполнять этот файл при каждом извлечении кода. В зависимости от версии PHP и того, как он запускается, это может очистить кеш только для командной строки, а не для текущей веб-версии.

Если очистка из командной строки не работает, рассмотрите возможность создания аналогичного сценария и вызова его через Интернет с помощью curl или же wget, Например, curl http://example.com/clear_cache.php?secret=abc123, Если вы создаете сценарий для доступа через Интернет, убедитесь, что он проверяет секретный ключ, чтобы предотвратить загрузку вашего сервера, постоянно очищая кэш.

Наконец, как уже предлагали другие, чтобы сделать ваши сборки полностью повторяемыми между тестированием и развертыванием, подумайте о том, чтобы в конце процесса тестирования был создан .zip файл всего кода, используемого для тестирования, включая библиотеки, загруженные композитором. Скорее, чем git pull на вашем сервере просто распакуйте файл поверх корня кода. Я понимаю что git pull && composer update это просто. Однако, как и предполагали другие, если библиотека обновляется между временем выполнения тестов и временем развертывания, ваш код может перестать работать должным образом.

Другие вопросы по тегам