Руководство по обновлению до Grav 1.8⚓︎
Разработка версии 1.8 продолжается, содержимое может не соответствовать последним выпущенным версиям Grav 1.7 или бета-версии 1.8
Grav 1.8 приносит значительные улучшения, включая требование PHP 8.3, обновлённые зависимости и новую безопасную систему обновлений. Вот несколько ключевых моментов:
- Требуется PHP 8.3+ — серьёзное повышение минимальной версии с PHP 7.3 в Grav 1.7
- Безопасная система обновлений — комплексные предварительные проверки, staging-среда, валидация и возможность отката
- Улучшенная поддержка Twig — обновление до Twig 3.x (форк с поддержкой Defer)
- Интеграция Symfony 7 — переход на компоненты Symfony 7.x для повышения производительности и безопасности
- Улучшенное кэширование — Symfony Cache вместо устаревшего Doctrine Cache
- Совместимость с Monolog — переход на Monolog 3 с сохранением поддержки синтаксиса Monolog 2.3+
- Качество кода — поддержка PHPStan уровня 6 и исправления под PHP 8.4
Grav 1.8 требует PHP 8.3 или более новую версию. Это серьёзное изменение по сравнению с требованием PHP 7.3.6+ в Grav 1.7. Обязательно создайте резервную копию сайта и протестируйте обновление в тестовой среде перед обновлением рабочего сайта. Либо используйте режим «safe-upgrade» — он автоматически создаёт восстанавливаемый снимок ядра Grav.
Самые частые проблемы⚓︎
-
Проблемы совместимости с PHP 8.3⚓︎
Проблема: Пользовательские плагины/темы, использующие устаревшие возможности PHP, перестают работать Решение: Обновите код до совместимости с PHP 8.3
- Проверьте объявления параметров с nullable-типами
- Обновите использование динамических свойств
- Замените устаревшие функции
-
Ошибки драйвера кэша⚓︎
Проблема: После обновления сайт «падает» из-за удалённых драйверов кэша Решение:
- Grav 1.8 автоматически преобразует адаптеры Doctrine Cache (
apcu,memcached,redis,arrayи т. д.) в их аналоги из Symfony Cache во время обновления. - Если встречается адаптер, который невозможно сопоставить, Grav переключается на стандартный кэш
filesystem, чтобы сайт продолжал работать. - Обновите конфигурацию кэша в
system.yamlна нужный вам адаптер:
- Grav 1.8 автоматически преобразует адаптеры Doctrine Cache (
-
Проблемы с логированием Monolog⚓︎
Проблема: Пользовательский код логирования может перестать работать с Monolog 2.3/3.x Решение: Обновите вызовы логирования:
-
Конфликты PSR-3 Logging⚓︎
Проблема: Плагины или темы, которые поставляются со своей папкой
vendor/илиcomposer.jsonи жёстко фиксируют старую версиюpsr/log1.x, заставляют Composer установить несовместимую версию. Это ломает обработчики Monolog 3 в Grav и вызывает ошибки видаReturn type must be compatible with Psr\Log\LoggerInterface. Решение:- Удалите явное требование
psr/logиз вашего расширения, либо - Предпочтите версию, поставляемую с Grav, добавив блок
replaceв вашcomposer.json: - После правки
composer.jsonудалите папкуvendor/плагина и пересоберите её командойcomposer install.
Команда
bin/gpm preflightвыводит эту проблему в виде предупреждения PSR/log compatibility — устраните её до обновления. - Удалите явное требование
-
Отсутствующая настройка⚓︎
Проблема: Ошибки из-за удалённой настройки
system.umask_fixРешение: Удалите эту настройку изsystem.yaml— она была убрана по соображениям безопасности
Краткое руководство по обновлению⚓︎
Grav 1.8 требует PHP 8.3 или новее. Рекомендуется использовать последнюю версию PHP 8.4.
Критические изменения, ломающие совместимость⚓︎
Требования к версии PHP⚓︎
- Минимальная версия PHP: 8.3+ (в Grav 1.7 было 7.3.6+)
- Убедитесь, что ваш хостинг поддерживает PHP 8.3 или выше
- Обновите весь устаревший PHP-код в собственных плагинах и темах
Удалённые драйверы кэша⚓︎
Удалены следующие неподдерживаемые драйверы кэша. Поддерживаемые адаптеры (APCu, Memcached, Redis, Array, Filesystem и т. д.) теперь обслуживаются Symfony Cache с теми же именами. Если Grav не может определить пользовательский адаптер, он автоматически переключается на filesystem:
APC→ используйтеapcuWinCacheXCacheMemcache→ используйтеmemcached
Удалённые настройки⚓︎
- Настройка
system.umask_fixудалена по соображениям безопасности
Система безопасного обновления⚓︎
Grav 1.8 представляет комплексную систему безопасного обновления:
Предварительные проверки (Preflight Checks)⚓︎
Запустите проверку совместимости перед обновлением:
Команда preflight проверяет:
- Плагины, требующие обновления
- Конфликты PSR-3 логирования
- Конфликты версий Monolog
- Другие проблемы совместимости
Автоматические безопасные обновления⚓︎
Новая система обновления включает:
- Staging — создание снимков состояния до начала обновления
- Validation — проверка целостности после обновления
- Rollback — автоматический откат в случае сбоя обновления
Режим восстановления⚓︎
- Интерфейс восстановления, защищённый токеном
- Система карантина плагинов
- Поддержка отката через CLI
Улучшенная поддержка Twig⚓︎
- Обновление до Twig 3.x (форк с совместимостью с PHP 8.4)
- Новые настройки
strict_mode.twig2_compatиstrict_mode.twig3_compat - Поддержка Deferred Extension для совместимости с Twig 1.x
- Улучшения безопасности Twig Sandbox
Ручное обновление Twig до версии 3⚓︎
Переключатели совместимости автоматически переписывают небольшое количество конструкций Twig 1/2 «на лету», но рекомендуется обновить шаблоны окончательно, чтобы избежать трансформаций во время выполнения.
- Защита циклов (loop guards): замените устаревшие циклы
forс проверками внутри на предварительную фильтрацию коллекции с помощью встроенного условияif({% for page in collection if page.published %}): - блоки
spacelessиfilter: В Twig 3 удалены блоки{% spaceless %}и{% filter %}— замените их на{% apply %}. - Тест
sameas: используйтеis same asвместо устаревшегоis sameas. - Сигнатура фильтра
replace: Twig 3 ожидает карту (ассоциативный массив) вместо двух строковых аргументов.
После исправления шаблонов отключите system.strict_mode.twig2_compat и system.strict_mode.twig3_compat, затем очистите кэш — это позволит убедиться, что всё отображается без слоя совместимости.
Интеграция Symfony 7⚓︎
- Переход на компоненты Symfony 7.x
- Symfony Cache вместо Doctrine Cache
- Повышенная производительность и безопасность
Обновление зависимостей⚓︎
Основные зависимости⚓︎
- PHP: 8.3+ (было 7.3.6+)
- Twig: 3.x (форк с поддержкой Defer)
- Symfony: 7.x (было 4.4)
- Monolog: 3.x (было 1.25)
- RocketTheme/Toolbox: 2.0 (было 1.0)
Удалённые зависимости⚓︎
- Doctrine Cache (заменён на Symfony Cache)
- Устаревшие драйверы кэша (APC, WinCache, XCache, Memcache)
Изменения конфигурации⚓︎
Новые настройки⚓︎
system:
strict_mode:
twig2_compat: true # Включаем режим совместимости с Twig 2
twig3_compat: true # Включаем режим совместимости с Twig 3
Обновлённые значения по умолчанию⚓︎
- Драйверы кэша переведены на Symfony Cache
- Усилены настройки безопасности
Изменения для разработчиков⚓︎
Улучшение качества кода⚓︎
- Поддержка PHPStan уровня 6 в классах фреймворка
- Исправления совместимости с PHP 8.4
- Более строгие объявления типов
- Улучшенная обработка ошибок
Изменения API⚓︎
- Обновлённая система событий
- Улучшенный интерфейс логирования
- Усовершенствованные абстракции кэширования
Совместимость плагинов и тем⚓︎
Необходимые обновления⚓︎
- Плагины должны поддерживать PHP 8.3+
- Обновить вызовы логирования для совместимости с Monolog
- Заменить вызовы устаревших функций
- Протестировать с компонентами Symfony 6.4/7.x
Чек-лист тестирования⚓︎
- Плагин загружается без ошибок
- Админ-панель работает корректно
- Формы обрабатываются правильно
- Загрузка медиа-файлов работает
- Кэширование функционирует как ожидается
Процесс обновления⚓︎
Чек-лист перед обновлением⚓︎
- Создайте резервную копию сайта — всегда делайте бэкап перед обновлением
- Проверьте версию PHP — убедитесь, что доступен PHP 8.3+
- Запустите предварительную проверку —
bin/grav preflight - Обновите пользовательский код — исправьте проблемы совместимости с PHP 8.3
- Тестируйте в staging-среде — никогда не обновляйте продакшн напрямую
Способы обновления⚓︎
Способ 1: Безопасное обновление (рекомендуется)⚓︎
# Выполняем безопасное обновление Grav
bin/gpm self-upgrade --safe
# Проверяем логи на наличие проблем
bin/grav logviewer
Способ 2: Классическое ручное обновление с ручным бэкапом⚓︎
# Сначала создаём бэкап
bin/grav backup
# Запускаем предварительные проверки вручную
bin/gpm preflight
# Обновляем все пакеты
bin/gpm update -f
# Обновляем Grav старым способом
bin/gpm self-upgrade --legacy
Действия после обновления⚓︎
- Проверьте работоспособность сайта
- Проверьте админ-панель
- Протестируйте формы и взаимодействие с пользователями
- Просмотрите логи ошибок
- При необходимости обновите конфигурации плагинов
Устранение неполадок⚓︎
Частые проблемы⚓︎
Ошибки кэша после обновления⚓︎
# Очищаем весь кэш
bin/grav clear-cache --all
# Проверяем конфигурацию кэша
cat user/config/system.yaml | grep -A 5 cache:
Проблемы с логированием⚓︎
Совместимость плагинов⚓︎
Процедуры восстановления⚓︎
Использование режима восстановления⚓︎
- Перейдите по адресу
/recoveryс токеном восстановления - Поместите проблемные плагины в карантин
- При необходимости откатитесь к предыдущей версии
Восстановление через CLI⚓︎
# Восстановление с предложением выбрать из последних снимков
bin/restore
# Показать список снимков
bin/restore list
# Откатиться к указанной версии снимка
bin/restore apply <version>
# Справка по команде
bin/restore -h
# Проверить статус режима восстановления
bin/restore recovery status
# Очистить статус восстановления
bin/restore recovery clear
Дополнительные примечания к списку изменений⚓︎
- Снимки безопасного обновления: В ранних бета-версиях Grav 1.8 (до
1.8.0-beta.10) при безопасном обновлении могли пропадать файлы с точкой в начале имени (dotfiles). Если вы обновлялись на этих сборках, обязательно проверьте корень проекта на наличие файлов вроде.htaccessи, если что-то отсутствует, выполните повторное безопасное обновление последней версией. - Права на CLI-скрипты: В
1.8.0-beta.16исправлено восстановление прав на выполнение скриптовbin/*после обновления. Если CLI-утилиты перестали запускаться («permission denied»), выполнитеchmod +x bin/*. - Изменения в YamlUpdater API: В версиях
1.8.0-beta.5—beta.7добавлены публичные методыYamlUpdater::get(),set()иexists(). Если у вас есть автоматизация или плагины, работающие с обновлением YAML, переключитесь на эти методы вместо использования приватных внутренних механизмов.
Где получить помощь⚓︎
Полезные ресурсы⚓︎
Информация для сообщений об ошибках⚓︎
При обращении за помощью укажите:
- Версию PHP
- Версию Grav (до и после обновления)
- Вывод команды preflight
- Логи ошибок
- Список установленных плагинов
Миграция из среды разработки⚓︎
Если обновляете сайт разработки:
- Обновите локальный PHP до 8.3+
- Обновите зависимости Composer
- Запустите автоматические тесты
- Обновите CI/CD-пайплайны
- Разверните в staging-среде перед продакшеном
Всегда тестируйте обновления в staging-среде перед применением на продакшене. Новая система безопасного обновления предоставляет возможность отката, но лучше предотвратить проблему, чем её исправлять.