Короткая история о том, как код, перенесённый с одного сайта на другой, перестал работать — и не выдал ни одной ошибки.
Это шестнадцатая часть цикла «Кэш страниц без MISS».
Что было
Модуль чистки кэша приехал на новый сайт вместе с темой. В обработчике сохранения товара стоял пропуск с комментарием: «реальные изменения ловит функция такая-то, здесь не чистим, чтобы не было шторма» (о шторме — пятнадцатая часть).
На исходном сайте функция была. На новом — нет: её не перенесли. Проверка function_exists молча возвращала false, пропуск срабатывал, а сброс не происходил нигде. Страницы товаров не сбрасывались никогда.
Как это проявилось
Обмен 1С заменил у товара миниатюру и удалил старое вложение. Страница товара осталась в кэше со ссылкой на старую картинку. Генератор нарезки для мобильных так и не сделал нужный размер для удалённого файла — и на телефоне карточка показывалась без картинки (404).
Как проверили после починки
| Действие | Ожидаемая очередь сброса |
|---|---|
| смена цены | страница товара, главная, каталог |
| сохранение без изменений | пусто |
| смена поля порядка | пусто |
Все три сценария сошлись.
Урок
Проверка «есть ли функция» не должна молча выключать логику. Если код полагается на внешний модуль, отсутствие модуля — повод для ошибки в журнале, а не для тихого пропуска.
if (!function_exists('queue_product_page_purge')) {
error_log('cache: queue_product_page_purge() отсутствует — страницы товаров не сбрасываются');
return;
}
При переносе кэш-кода на новый сайт проверяйте грепом, что каждая функция, на которую ссылаются комментарии и проверки, реально существует.
Обмен обновил товар, а на сайте старое?
Пришлите адрес — проверю, сбрасывает ли обмен страницы товаров.
// загружаю комментарии…