Перед обновлением всегда читайте журналы на странице релиза ядра/модуля и принимайте решение о необходимости обновления на основе этой информации.
Резервное копирование
Создание резервной версии сайта:
drush ard
Если сайт делается через проект Drupal, девятый drush будет поставлен локально. Команда drush ard может не сработать.
Поэтому резервное копирование придется делать вручную.
Выгрузите базу данных в текущую папку:
drush cr ; drush sql-dump > dump.sql
Заархивируйте папку с сайтом:
zip -r site.zip site
Обновление ядра
Ядро обновляется с помощью команды:
composer update drupal/core --with-dependencies -o
После обновления ядра необходимо обновить базу данных и выгрузить конфиги:
drush cr ; drush updb --entity-updates -y ; drush cex -y
Перейдите на страницу «Отчет о состоянии» и проверьте наличие ошибок, а также посмотрите версию ядра:
/admin/reports/status
В некоторых случаях, когда вы хотите обновить старый сайт, необходимо удалить папки core, vendor и composer.lock, предварительно сделав резервную копию:
zip -r core.zip core ; zip -r vendor.zip vendor ; zip composer.lock.zip composer.lock ; rm -rf core ; rm -rf vendor ; rm composer.lock
И обновить весь сайт:
composer update --with-dependencies -o ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Будьте предельно внимательны при обновлении всего сайта. После обновления некоторых модулей — некоторые функциональные возможности сайта могут не работать.
Обновление модуля
Модуль обновляется так же, как и ядро. Единственное отличие в том, что вместо core вы должны написать название модуля:
composer update drupal/modulename ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Если модуль не обновляется, его может не быть в файле composer.json. Обычно это означает, что модуль был установлен через drush.
Вам необходимо переустановить его через composer:
composer require drupal/modulename ; drush updb --entity-updates -y ; drush cr ; drush cex -y
Все настройки модуля будут сохранены.
Восстановление сайта через резервное копирование
Это более актуально, если по какой-то причине вы обновили сайт сразу в продакшене. Делать это не рекомендуется. Лучше сделать обновление на локальном или техническом сервере, а затем — перенести изменения на основной сайт.
drush
Если сайт сломался и нет времени разбираться, лучше сразу развернуть резервную копию.
drush arr backup.tar.gz --overwrite
Файл резервной копии должен располагаться параллельно с папкой сайта.
Вручную
Если резервная копия была сделана вручную, то просто распакуйте архив и замените им старый.
Импортировать базу данных, которая находится в файле dump.sql, можно с помощью команды:
drush sql-drop ; drush sql-cli < dump.sql
sql-drop полностью очистит базу данных, доступы к которой хранятся в файле:
/sites/default/settings.php
sql-cli < dump.sql импортирует базу данных из файла dump.sql в базу данных, доступ к которой хранится в файле:
/sites/default/settings.php
Убедитесь, что файл dump.sql находится на месте. В противном случае вы можете очистить текущую базу данных, и импортировать будет нечего.
Сбросьте кэш:
drush cr
Возможные проблемы
Последние записи в журнале
Если сайт перестал работать, и вместо страницы открывается непредвиденная ошибка или страница 500, вы можете прочитать причину на странице Последние журналы:
/admin/reports/dblog
Найдите последнюю ошибку. Если из контекста понятно, в чем проблема, исправьте ее. Если нет, скопируйте ошибку и погуглите.
Вход в ISPmanager
Вы можете получить доступ к журналу ISPmanager по следующему адресу:
site.ru:1500/ispmgr
Журнал ошибок находится в боковой панели -> WWW -> Журналы.
Открыть:
site.ru.error.log
Затем аналогично с пунктами «Последние записи журнала».
Проблемные модули
Должен предупредить, что все написанное ниже — это проблемы, с которыми столкнулся лично я. Вполне возможно, что я делал что-то не так, и информация не отражает действительности. Если это так, напишите мне, и я с радостью все исправлю.
Лучше не обновлять следующие модули:
- Вкладки блоков;
- Цветовое поле;
С этими нужно быть осторожнее:
- Webform;
- Панель инструментов администратора;
После обновления может измениться разметка, а значит — слетит верстка.
Чтобы предотвратить обновление модулей после команды:
composer update --with-dependencies -o
Вам необходимо установить определенную версию модуля. Например, мы видим, что Block Tabs требует обновления:
Поскольку сейчас установлена версия 8x-1.0-alpha3, я копирую все после 8x- и переустанавливаю Block Tabs, чтобы он не обновлялся и был зафиксирован на этой версии:
composer require drupal/blocktabs:1.0-alpha3