Заметки
После обновления: Class ... not found
После обновления: Class ... not found: Кеш, модули, неполное обновление, composer/autoload.
После обновления: Class ... not found. Основной фокус: Кеш, модули, неполное обновление, composer/autoload.
Задача
Разобрать коробочную диагностику: обновление, 500, cron, доступ, сеть или восстановление.
Задача — после обновления: Class ... not found. Кеш, модули, неполное обновление, composer/autoload.
Главное — не искать один универсальный метод, а сначала определить сущность, права и слой API, через который выполняется действие.
Как это устроено
В коробке результат зависит не только от кода Битрикса, но и от окружения: PHP, права файлов, nginx/apache, php-fpm, cron, база, сеть и локальные доработки.
Разложите сценарий на уровни: где появляется исходное значение, какой метод его меняет, кто выполняет действие и какое событие должно сработать после изменения.
Если сценарий проверяется под администратором, отдельно повторите его под обычным пользователем. Для прав, CRM, задач, Диска и приложений это часто даёт другой результат.
Рабочий подход
Собирайте диагностику слоями: логи PHP и веб-сервера, консоль браузера, агенты, права файлов, состояние модулей, кеш и последние изменения. На бою сначала фиксируйте текущее состояние, потом меняйте.
Сделайте минимальный тест на одной сущности, сохраните входные данные и ответ метода, а затем расширяйте решение на массовый сценарий.
На коробке удобнее добавлять временное логирование рядом с местом выполнения кода, а в облаке — сохранять входящие и исходящие REST-запросы в свой журнал интеграции.
Частые ошибки
Не правьте ядро и не отключайте права как быстрый фикс. После обновления такой костыль обычно ломается повторно и усложняет диагностику.
- Проверять сценарий только под администратором и не видеть проблему прав обычного пользователя.
- Смешивать ID разных сущностей: задачу, файл Диска, CRM-дело, товарную строку или пользователя.
- Не логировать фактический запрос и ответ, из-за чего ошибка выглядит случайной.