Правки не доехали на боевой - разбор причин
Код выложен, а боевой сайт ведёт себя по-прежнему. Разбираем причины по убыванию частоты, начиная с самого простого: доехал ли файл до сервера.
С чего начать
Сверяем файл на сервере с тем, что в репозитории:
md5sum /home/bitrix/www/local/php_interface/init.phpgit -C /home/bitrix/www show HEAD:local/php_interface/init.php | md5sum# разные суммы означают, что файл на сервере другой, и разбор на этом заканчиваетсяСверка контрольных сумм отвечает на главный вопрос за секунду. Совпали - файлы доехали, и причина в кэше или в другом контуре; не совпали - разбираем саму выкладку.
Смотрим, что выложено на сервере:
git -C /home/bitrix/www log --oneline -3git -C /home/bitrix/www status --short | head# лишние изменения в рабочем дереве означают правки прямо на боевом сервереПроверяем кэш кода в памяти:
$status = function_exists('opcache_get_status') ? opcache_get_status(false) : null;printf("кэш кода: %s, файлов в кэше: %d\n", $status ? 'включён' : 'выключен', $status['opcache_statistics']['num_cached_scripts'] ?? 0);// кэш кода держит прежнюю версию файла до истечения проверки или до перезапускаСбрасываем кэш платформы и композит:
$GLOBALS['CACHE_MANAGER']->CleanAll();\Bitrix\Main\Data\StaticHtmlCache::getInstance()->deleteAll();BXClearCache(true);// после выкладки шаблонов и компонентов кэш сбрасывают целикомПричины
-
Файлы просто не доехали до сервера примерно 30% случаев
ПризнакКонтрольная сумма файла на сервере не совпадает с суммой из репозитория.
ПроверкаСверяем суммы и смотрим журнал выкладки: дошла ли она до конца без ошибок.
Что делатьПовторяем выкладку и разбираем её ошибку, а не ищем причину на стороне сайта.
-
Кэш кода в памяти держит прежнюю версию примерно 25% случаев
ПризнакФайл на диске новый, а поведение сайта соответствует прежнему коду.
ПроверкаСмотрим настройки кэша кода: включена ли проверка изменений и как часто.
Что делатьСбрасываем кэш кода после выкладки или включаем проверку изменений по времени.
-
Страница отдаётся из кэша платформы примерно 20% случаев
ПризнакИзменения видны под администратором или после сброса кэша, а гостю - нет.
ПроверкаОткрываем страницу в окне без входа на сайт и сравниваем её содержимое.
Что делатьСбрасываем кэш компонентов и композитные копии, а в выкладку добавляем этот шаг.
-
Правка сделана не в том контуре или не в той ветке примерно 15% случаев
ПризнакНа боевом сервере нет ни файла, ни коммита с этой правкой в журнале.
ПроверкаСмотрим журнал последних коммитов на сервере и сверяем ветку выкладки.
Что делатьПереносим правку в нужную ветку и повторяем выкладку по обычному порядку.
-
Файл перекрыт другим файлом проекта примерно 10% случаев
ПризнакПравка есть в файле, но выполняется другой файл с тем же назначением.
ПроверкаИщем одноимённые файлы в каталогах проекта и платформы, включая шаблоны.
Что делатьУбираем лишнюю копию файла и оставляем один источник правды для этого кода.
Частые вопросы
Как быстро понять, доехал ли файл?
Сверить контрольную сумму файла на сервере с суммой из репозитория. Это одна команда, и она делит разбор надвое.
Почему помогает перезапуск обработчика PHP?
Он сбрасывает кэш скомпилированного кода, где лежала прежняя версия файла. Если помогло именно это, настройку проверки изменений стоит пересмотреть.
Нужно ли сбрасывать кэш после каждой выкладки?
После правки шаблонов и компонентов - да, это дешевле разбора жалоб. Шаг сброса включают в саму процедуру выкладки, чтобы о нём не вспоминали.
Почему изменения видит только администратор?
Обычно из-за кэша компонентов и композитных копий страниц для гостей. Проверяют в окне без входа на сайт, а не под своей учётной записью.
Что делать с правками прямо на боевом сервере?
Забрать их в репозиторий, пока они не потерялись при следующей выкладке. Дальше договориться, что боевой сервер меняется только выкладкой.
Смежное
- Git и выкладка - оглавление подтемы
- Выкладка на боевой: порядок, структура, откат - как устроена сама выкладка
- После выкладки сайт сломался: разбор причин - соседний разбор с обратным симптомом
- Правка не видна на сайте: какой кэш сбросить - какие уровни кэша сбрасывать
- Три контура проекта: разработка, тест, бой и порядок переноса - откуда берётся «правка не в том контуре»
- Проверки перед выкладкой: синтаксис, стандарт, тесты, миграции - что проверяют до выкладки
- Не удалось обнаружить код вызова компонента: разбор причин - когда правят не тот файл
- Архитектура проекта - структура файлов и порядок подключения
- Акселератор PHP: размер кэша, сброс при выкладке - настройка кэша кода целиком