Короткая история о том, как код, перенесённый с одного сайта на другой, перестал работать — и не выдал ни одной ошибки.

Это шестнадцатая часть цикла «Кэш страниц без MISS».

Что было

Модуль чистки кэша приехал на новый сайт вместе с темой. В обработчике сохранения товара стоял пропуск с комментарием: «реальные изменения ловит функция такая-то, здесь не чистим, чтобы не было шторма» (о шторме — пятнадцатая часть).

На исходном сайте функция была. На новом — нет: её не перенесли. Проверка function_exists молча возвращала false, пропуск срабатывал, а сброс не происходил нигде. Страницы товаров не сбрасывались никогда.

Как это проявилось

Обмен 1С заменил у товара миниатюру и удалил старое вложение. Страница товара осталась в кэше со ссылкой на старую картинку. Генератор нарезки для мобильных так и не сделал нужный размер для удалённого файла — и на телефоне карточка показывалась без картинки (404).

Как проверили после починки

ДействиеОжидаемая очередь сброса
смена ценыстраница товара, главная, каталог
сохранение без измененийпусто
смена поля порядкапусто

Все три сценария сошлись.

Урок

Проверка «есть ли функция» не должна молча выключать логику. Если код полагается на внешний модуль, отсутствие модуля — повод для ошибки в журнале, а не для тихого пропуска.

if (!function_exists('queue_product_page_purge')) {
    error_log('cache: queue_product_page_purge() отсутствует — страницы товаров не сбрасываются');
    return;
}

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

Обмен обновил товар, а на сайте старое?

Пришлите адрес — проверю, сбрасывает ли обмен страницы товаров.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.