Прежде чем приступать к обновлению — всегда читайте логи на странице релиза ядра/модуля и уже на основании этой информации — принимайте решение — обновляться или нет.
Бэкап
Делаем резервную версию сайта:
drush ard
Если сайт сделан через Drupal Project, то девятый 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
Далее, аналогично с пунктов “Последние записи журнала”
Проблемные модули
Должен предупредить, что все, что написано ниже — это проблемы, с которыми столкнулся лично я. Вполне вероятно, что я делал что-то не так, и информация не отражает действительности. Если это так — напишите мне, буду рад исправиться.
Следующие модули лучше не обновлять:
- Block tabs;
- Color field;
С этими стоит быть осторожнее:
- Webform;
- Admin Toolbar;
После апдейта может поменяться разметка, а следовательно - верстка слетит.
Для того чтобы модули не обновились после команды:
composer update --with-dependencies -o
Нужно установить конкретную версию модуля. Например мы видим, что Block Tabs требует обновления:
Т.к. сейчас установлена версия 8x-1.0-alpha3, то я копирую все, после 8x- и переустанавливаю Block Tabs, чтобы он не обновлялся и был зафиксирован на этой версии:
composer require drupal/blocktabs:1.0-alpha3