Миграция на Drupal 9

Міграція з drupal-project на recommended-project. Готуємось до Drupal 9

Починаючи з Drupal 8.8.0 з’явилися офіційні Composer шаблони для керування Drupal.

Грунтуючись на першому шаблоні (drupal/legacy-project), я і створював свої перші сайти на D8 і писав курс про блог. Але скоро я перейшов на більш сучасний drupal/recommended-project. Але залишилася одна проблема, мої проекти та сайти моїх постійних клієнтів залишилися на legacy-project. Якось я вирішив цю справу виправити. Всім відомий (серед Drupal розробників) Niklan писав статтю як мігрувати на recommended-project, але в мене не вийшло. Я вирішив піти своїм шляхом.

Для початку визначимося, що це за такі Composer шаблони:

drupal/recommended-project – корінь сайту винесено на рівень нижче до папки web/ за замовчуванням. Цей шаблон рекомендується для всіх нових проектів на Drupal 8 та 9. Приблизно так:

project/
   ├─ web/
   │ ├─ core/
   │ ├─ libraries/
   │ ├─ modules/
   │ ├─ profiles/
   │ ├─ themes/
   │ └─ index.php
   ├─ vendor/
   └─ composer.json

drupal/legacy-project – корінь сайту знаходиться в корені проекту, як у архівах. Так:

project/
   ├─ core/
   ├─ libraries/
   ├─ modules/
   ├─ profiles/
   ├─ themes/
   ├─ vendor/
   ├─ index.php
   └─ composer.json

Скажемо по простому – recommended-project краще і швидше. Не буду вдаватися до подробиць, Niklan все описав чудово.

Тепер до діла. Що нам потрібно зробити, щоб мігрувати на сучасний шаблон? По суті потрібно змінити composer.json, зокрема замінити “drupal/core”: “^8.8.0”, на новий “drupal/core-recommended”: “^8.8”, і ще деякі дрібниці , після чого запустити всім відомий composer update. Але не пішло. Я зробив все за статтею, міграція відбулася, але сайт не відкрився. Я пішов іншим шляхом.

Я розсудив так – хто нам заважає створити поряд з папкою нашого сайту, допустимо gavzav.name папку нового проекту, встановити в нього всі ті ж модулі, які були на старому сайті, після чого замінити тему, sites і т.д., запустити update. Все пройшло на ура. Помилок не виявлено, сайт запрацював на новому шаблоні. Сайтів клієнтів у мене багато, я створив для себе чекліст, що за чим робити, щоб не напортачити. Це я сьогодні і викладаю.

Drupal 9

Для початку, якщо у вас віртуальний хостинг і не можна вказати папку сайту, то я поки що не знаю, що з цим робити. Та й поїхали.

1. Оновлюємо composer до версії 2. Якщо ви читали курс “Як створити блог на Drupal 9”, то в курсі, що composer ми запускаємо від користувача, який не root. Однак сам composer ми оновимо від root,

composer self-update

а решту робитимемо вже від користувача.

2. Уважно дивимося нашу тему та модулі. Проблеми у мене виникли з мобільного меню. Я раніше використав mmenu, думав вони таки зроблять нову версію, але так і не зробили. Тому деякі проекти я переклав на cheeseburger_menu, а він нещодавно оновився до 5 версії і доводиться працювати з ним практично з нуля. Тільки responsive_menu поки не підводить, на нього я й переклав усі проекти, щоби далі не було сюрпризів.

3. Видаляємо непотрібні модулі і все зайве, включаючи бібліотеки з папки library.

4. Допустимо сайт у нас буде gavzav.name і така сама папка, яка лежить у var/www/gavzav.name/ Переходимо до папки

cd /var/www

5. Створюємо новий проект у папці gavzav

composer create-project --dev 'drupal/recommended-project:~8.9' gavzav

6. Копіюємо з папки gavzav.name в папку gavzav/web свої файли типу favicon, логтипи, файли підтвердження сайту та інше що стосується Drupal. Туди ж копіюємо модулі з gavzav.name/modules/custom у папку gavzav/web/modules/custom. Папку /modules/contrib не чіпаємо. Копіюємо папки libraries, sites, themes, profiles в gavzav/web із заміною.

7. Готуємось встановлювати модулі на новий сайт. Відкриваємо composer.json і копіюємо звідти все, з розділу “require”, що починається на drupal/ у текстовий редактор (крім “drupal/core”) у новий текстовий файл. Я використовую Notepad++. Вийде у нас купа рядків типу:

"drupal/admin_toolbar": "^2.0",
"drupal/advagg": "^4.0",
"drupal/antibot": "^1.2",
...

і т.д. Скористаємося заміною і замінимо по порядку те, що в []

[ "] на [] (на нічого)
[": "] на [:]
[",] на [';]
[drupal/] на [composer require 'drupal/]

Рядки у нас мають вийти такі

composer require 'drupal/admin_toolbar:^2.0';
composer require 'drupal/advagg:^4.0';
composer require 'drupal/antibot:^1.2';
...

Тобто. готові команди composer для встановлення модулів.

8. Ідемо до папки нового сайту

cd /var/www/gavzav

І запускаємо установку модулів або по одному або все скопом з того, що в нас вийшло на кроці 7.

9. Перенастроюємо файл хоста, у мене nginx, я змінив рядок

root /var/www/gavzav.name;

на

root /var/www/gavzav/web;

Тобто. на нову папку. Перезавантажуємо nginx або там у вас.

10. Оскільки файли з папки sites ми замінили, база до нового сайту вже підключена. Ми просто йдемо в браузері за нашою звичною адресою та запускаємо update – gavzav.name/update.php. У процесі оновлення вам скажуть, що ви пропустили. Наприклад такого типу:

Це не страшно. У мене в одному проекті чомусь composer не записував модулі, що встановлюються. Просто встановлюємо модулі, що бракують, і все.

11. Ідемо у Звіти / Звіт про стан, Останні записи журналу та перевіряємо. У мене з понад 20 сайтів проблем не виникло.

12. Перейменовуємо папку gavzav.name у будь-що, наприклад gavzav___name, а папку gavzav в gavzav.name. тобто. повертаємо новому сайту рідну папку.

13.Змінюємо назад файл хоста

root /var/www/gavzav/web;

на

root /var/www/gavzav.name/web;

Перезавантажуємо nginx або що там у вас.

14. Коли будете впевнені, що все працює, видаліть непотрібну папку gavzav___name.

Готово.

Залишити відповідь