Почитать другие заметки или статьи

Как известно, в Joomla 5.4 появился функционал автоматического обновления. По замыслу разработчиков, после выхода новой версии, система автоматически обновится и (если это указано в настройках) оповестит об этом выбранную группу пользователей. Знакомство с автоматическим обновлением я начал с Joomla 6. Именно при работе с шестой версией я и получил некоторую порцию ошибок при запуске автоматического обновления.

Хочу заметить

На момент написания этих строк опробовать автоматическое обновление я физически не мог, поскольку новые версии Joomla ещё не успели выйти.

При этом на части обновляемых сайтов столкнулся с тем, что при попытке включить автоматическое обновление, я получал ошибку.

Ошибка в разных случаях была разной, однако принцип её появления был схожим.

Как включить автоматическое обновление в Joomla

Для тех, кто не помнит, а, может, и не знает, хочу рассказать: как включается автоматическое обновление.

В административной панели мы должны зайти в раздел «Система — Обновление — Joomla».

Далее, в правом верхнем углу нажимаем кнопку «Настройки» и затем переходим на вкладку «Automated Updates».

Здесь переключаем переключатель «Automated Update» в активное положение. И сохраняем настройки.

Если всё хорошо, то будет сгенерирован токен, также будет указана дата последней проверки.

В моём случае хорошо бывало не всегда.

Рассмотрю ошибки, с которыми я сталкивался.

Error while registering to automated update service: Client error: `GET https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck` resulted in a `404 Not Found` response (400).

При данной ошибке и попытке открыть URL: https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck открывалась 404 ошибка.

В моём случае происходило это, если сайт работал используя протокол FastCGI.

Проблема, собственно, заключалась в том, что сервер не мог обработать такой URL.

Решением данного вопроса стал перевод сайта в режим работы протокола CGI.

Панель ISPManager позволяет это провернуть в пару кликов мышкой.

Если у вас другая панель и сделать это самостоятельно возможности нет, тогда пишем хостинг провайдеру. И умоляем его решить данный вопрос.

Error while registering to automated update service: Server error: `GET https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck` resulted in a `500 Internal Server Error` response (400).

В данном случае система нам с прискорбием сообщает, что при попытке открытия URL https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck и получения токена, мы получаем 500 ошибку.

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

Проблема, как правило, заключается в том, что в конструкторе плагина, либо в каком то его методе вызываются классы или методы, которые вызывать ещё рановато.

Напомню, что список системных плагинов в административной панели можно получить путём использования фильтра, по параметру «system».

Причину проблемы нужно искать среди сторонних плагинов. «Родной», написанный разработчиками Joomla, плагин причиной ошибки являться не может.

Открываем в новой вкладке URL:

https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck

И последовательно отключаем и включаем активированные в данный момент плагины.

Бывает так, что при открытии адреса:

https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck

…на белом экране открывается текст вполне конкретной ошибки.

В таком случае, чтобы не гадать на кофейной гуще, имеет смысл в общих настройках сайта включить логирование.

Далее, в каталоге с логами находим файл everything.php.

Если этот файл уже существовал ранее, рекомендую его удалить.

Затем открываем URL:

https://ваш сайт/api/index.php/v1/joomlaupdate/healthcheck

После чего файл everything.php с большой вероятностью будет создан. Прочитав его содержимое, скорее всего, виновник ошибки будет найден.

Что делать, если плагин очень нужен?

Итак, мы нашли плагин, который не даёт корректно настроить автоматическое обновление, но отключить его нет никакой возможности.

Что же делать в таком случае?

А в таком случае в конструктор плагина мы добавим небольшой код.

$uri = Uri::getInstance();
$current_url =  $uri->toString();

$check = mb_strpos($current_url, 'joomlaupdate/healthcheck');
if ($check) {
  return;
}
        

Если у плагина нет конструктора, то его можно дописать или вставить мой код в начало методов плагина.

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

В итоге, он не отправляет сайт в 500 ошибку и получение токена для автоматического обновления проходит без проблем.

Заключение

Хочу заметить, что проблемных плагинов может быть несколько.

Очень любят мешать автоматическому обновлению плагины для компонента Virtuemart.

Надеюсь, данная заметка была полезна не только мне.

Напоминаю!

Если у вас остались вопросы и предложения, их всегда можно озвучить в группе VK по ссылке ниже:

https://vk.com/sitogon

А также в недавно созданной группе Telegram. Ссылка:

https://t.me/sitogonGroup

С уважением, Владимир Егоров.