Обновление до Grav 1.8 beta¶
Внимание
УВЕДОМЛЕНИЕ: это незавершённая работа, содержимое может не соответствовать последним выпущенным версиям Grav 1.7 или 1.8 beta
Grav 1.8 приносит значительные улучшения: требование PHP 8.3, обновлённые зависимости и новую систему безопасного обновления. Вот несколько главных новшеств:
- Требование PHP 8.3+: серьёзное изменение по сравнению с требованием PHP 7.3 в Grav 1.7
- Система безопасного обновления: комплексные предварительные проверки, подготовка, валидация и возможность отката
- Улучшенная поддержка 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
- Проверьте объявления параметров, допускающих null
- Обновите использование динамических свойств
- Замените устаревшие функции
-
Ошибки драйверов кэша¶
Проблема: сайт ломается после обновления из-за удалённых драйверов кэша Решение:
- Grav 1.8 автоматически сопоставляет адаптеры кэша Doctrine (
apcu,memcached,redis,arrayи т. д.) с их эквивалентами в Symfony Cache при обновлении. - Если Grav встречает адаптер, который не может сопоставить, он откатывается к кэшу
filesystemпо умолчанию, чтобы сайт продолжал работать. - Для ясности обновите конфигурацию кэша в
system.yamlдо нужного адаптера:
- Grav 1.8 автоматически сопоставляет адаптеры кэша Doctrine (
-
Проблемы журналирования Monolog¶
Проблема: пользовательский код журналирования может сломаться с Monolog 2.3/3.x Решение: обновите вызовы журналирования:
-
Конфликты журналирования PSR-3¶
Проблема: плагины или темы, которые поставляются с собственной папкой
vendor/илиcomposer.jsonи фиксируютpsr/logна старой версии 1.x, вынуждают Composer установить несовместимую версию. Это ломает ожидания обработчика Monolog 3 в Grav и вызывает ошибки видаReturn type must be compatible with Psr\Log\LoggerInterface. Решение:- Удалите явное требование
psr/logиз своего расширения либо - Предпочитайте версию из комплекта Grav, добавив в
composer.jsonблокreplace: - Удалите папку
vendor/плагина после обновленияcomposer.jsonи пересоберите её командой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 (используйте apcu)
- WinCache
- XCache
- Memcache (используйте memcached)
Удалённые настройки¶
- Настройка
system.umask_fixудалена по соображениям безопасности
Система безопасного обновления¶
Grav 1.8 представляет комплексную систему безопасного обновления:
Предварительные проверки¶
Запустите проверки совместимости перед обновлением:
Команда preflight проверяет: - Плагины, ожидающие обновления - Конфликты журналирования PSR-3 - Конфликты версий Monolog - Другие проблемы совместимости
Автоматические безопасные обновления¶
Новая система обновления включает: - Подготовку: создаёт снимки перед обновлением - Валидацию: проверяет целостность обновления - Откат: автоматическое восстановление, если обновление не удалось
Режим восстановления¶
- Интерфейс восстановления, доступный по токену
- Система карантина плагинов
- Поддержка отката из CLI
Улучшенная поддержка Twig¶
- Обновление до Twig 3.x (форк для совместимости с PHP 8.4)
- Новые настройки
strict_mode.twig2_compatиstrict_mode.twig3_compat - Поддержка Deferred Extension для совместимости с Twig 1.x
- Улучшения безопасности песочницы Twig
Ручное обновление до Twig 3¶
Переключатели совместимости на лету переписывают ряд конструкций Twig ½, но шаблоны следует обновить навсегда, чтобы избежать преобразований во время выполнения.
- Защита в циклах: замените устаревшие циклы
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 в классах Framework
- Исправления для совместимости с PHP 8.4
- Улучшенные объявления типов
- Улучшенная обработка ошибок
Изменения API¶
- Обновлённая система событий
- Улучшенный интерфейс журналирования
- Улучшенные абстракции кэширования
Совместимость плагинов и тем¶
Обязательные обновления¶
- Плагины должны поддерживать PHP 8.3+
- Обновите вызовы журналирования для совместимости с Monolog
- Замените устаревшие вызовы функций
- Проверьте работу с компонентами Symfony 6.4/7.x
Контрольный список проверки¶
- Плагин загружается без ошибок
- Интерфейс админки работает корректно
- Формы обрабатываются правильно
- Загрузка медиафайлов работает
- Кэширование работает как ожидается
Процесс обновления¶
Контрольный список перед обновлением¶
- Сделайте резервную копию сайта — всегда создавайте резервную копию перед обновлением
- Проверьте версию PHP — убедитесь, что доступен PHP 8.3+
- Запустите предварительную проверку —
bin/grav preflight - Обновите пользовательский код — исправьте проблемы совместимости с PHP 8.3
- Проверьте на тестовом окружении — никогда не обновляйте продакшен напрямую
Способы обновления¶
Способ 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:
Проблемы журналирования¶
# Проверить права на папку журналов
ls -la logs/
# Проверить журналирование
bin/grav log --level=debug
Совместимость плагинов¶
Процедуры восстановления¶
Использование режима восстановления¶
- Перейдите по URL
/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) могли пропускать точечные файлы при безопасном обновлении. Если вы обновлялись такими сборками, перепроверьте корень проекта на наличие файлов вроде.htaccessи заново запустите последнюю процедуру безопасного обновления, если чего-то не хватает. - Права на скрипты CLI: исправление в
1.8.0-beta.16восстанавливает права на выполнение скриптовbin/*после обновлений. Если инструменты CLI перестали работать (отказ в доступе), выполнитеchmod +x bin/*, чтобы привести их к ожидаемому состоянию. - Изменения API YamlUpdater: в версиях с
1.8.0-beta.5поbeta.7появились новые публичные помощникиYamlUpdater::get(),set()иexists(). Обновите любую автоматизацию или плагины, которые работают с обновлением YAML, чтобы вызывать эти методы, а не полагаться на приватные внутренности.
Как получить помощь¶
Ресурсы¶
Сведения для поддержки¶
Сообщая о проблемах, указывайте: - версию PHP - версию Grav (до и после обновления) - вывод команды preflight - журналы ошибок - список установленных плагинов
Миграция с окружения разработки¶
Если вы обновляете сайт для разработки: 1. Обновите локальный PHP до 8.3+ 2. Обновите зависимости composer 3. Запустите автоматические тесты 4. Обновите конвейеры CI/CD 5. Разверните на тестовом окружении перед продакшеном
⚠️ Важно: всегда проверяйте обновления на тестовом окружении, прежде чем применять их в продакшене. Новая система безопасного обновления даёт возможность отката, но предотвратить проблему лучше, чем восстанавливаться после неё.