Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Basculer Drupal 8 vers Drupal 9

De AJLSM
Aller à la navigation Aller à la recherche

Introduction

Suite à l'arrêt du support de Symphony 2.x et 3.x vers 4.x, Drupal arrête le support "gratuit" de Drupal 8 en octobre 2021.

Le support "gratuit" de Drupal 7 s'arrête en octobre 2022.

Ces changements majeures obligent à migrer toutes les applications D7 et D8 vers D9.

Pré-requis

Pour installer Drupal 9, un certain nombre de mise à jour sont nécessaire :

  • Mise à jour obligatoire de PHP vers 7.3 <ref>Migrez vers PHP 7.3.x

Selon les versions d'Ubuntu, par exemple en 18.04 LTS,

apt-get update

ne propose pas la version PHP 7.3.

Dans ce cas, utiliser les instructions suivantes :

Ouvrir le terminal et taper :

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.3

php7.3 will be updated automatically when updates become available. Alternatively you can build php7.3 from source in Ubuntu 18.04, but it will not be updated automatically, and it also takes more than an hour to build if you want to test it too. After installing php7.3 you can show php7.3 modules that can also be installed by running the following command:

apt-cache search php7.3 | grep php7.3

A quick one-line command to install the same packages on php7.3 as php7.2:

sudo apt install $(apt list --installed | grep php7.2- | cut -d'/' -f1 | sed -e 's/7.2/7.3/g')

Ensuite

sudo apt-get install php7.3-mysql

</ref>

  • Mise à jour de Apache vers 2.4.7 minimum <ref>Migrez vers Apache

Recherchez la version de Apache.

Commande à utiliser

$ apachectl -V

</ref>

  • Mise à jour obligatoire de Drush vers 10 (via composer : "drush/drush": "~10.0.0 »,)

Préparation de Drupal est mise à jour des modules

Drupal 8 doit être dans la version la plus récente.

Important :
Pensez à faire une sauvegarde de .htaccess avant de lancer une mise à jour de Drupal !.

Lancer la mise à jour de Drupal et de ses modules.

composer update

Tous les modules doivent être mis à jour vers leur versions les plus récentes. Ils doivent tous être compatibles avec Drupal 9.

Cette compatibilité est exprimée par l'information : Requires Drupal: ^8 || ^9 qui doit être présente lors de la mise à jour des modules. Le fichier [nom-du-module].info.yml de chaque module doit contenir l'information suivante :

core_version_requirement: ^8 || ^9

Préparation de la migration

Upgrade Status

Pour facilité ce travail d'inventaire, on utilise un module Upgrade Status. Ce module liste les pré-requis systèmes, les modules installés, ceux qui ne sont pas installés, etc, et signale les erreurs de compatibilités et les correctifs à apporter.

Important :
À désinstaller impérativement avant de basculer en D9, après avoir effectués et validés tous les tests de compatibilités.

Travailler avec Upgrade Status

  • Installez la dernière version du module Upgrade Status avec composer, par exemple comme suit :
$ composer require 'drupal/upgrade_status:^3.0'
Notice :
Un rappel : toujours vider les caches après l'installation ou la mise à jour de Drupal et de ses modules et faire un .update.php<ref>Update.php

Pour forcer le update.php à se lancer sans authentification, modification du paramétre update_free_access dans setting.php.

</ref> puis les mises à jour attendues depuis l'update.php.
  • Installez le module upgrade status : -> [$site-drupal]/admin/modules
  • Videz les caches
  • Affichez le rapport de Upgrade Status : -> [$site-drupal]/admin/reports/upgrade-status

Lorsque Upgrade Status est activé, Le rapport de Upgrade Status se compose de 6 zones :

  • Synthèse : FIX incompatibilies doit être OK sur tous les points
  • Drupal core and hosting environment : l'environnement système et les modifications à apporter si nécessaire
  • Retirer : liste les modules demandés par composer maisnon utilisés et non installés, qui peuvent poser problèmes : à supprimer de composer.json
  • Mettre à jour : liste les modules à mettre à jour vers une verion compatible D9
  • Collaborate with maintainers : liste les modules qui ne sont plus à jour. Souvent il manque l'information "Requires Drupal: ^8 || ^9" dans le fichier [nom-du-module].info.yml. Si le module n'est pas utilisé, supprimez le module.
  • Drupal 9 compatible : liste les modules compatibles D9.

Prêt pour la migration vers D9 ?

- Si tout est résolu, on obtient l'écran suivant, sinon, voir les autres possibilités de résolutions ci-dessous :

- Tout est OK, passer à la migration :

Migration vers D9

Voir ici : https://www.drupal.org/docs/upgrading-drupal/upgrading-from-drupal-8-to-drupal-9-or-higher

Upgrade rector

Ce module, complémentaire de Update Status, aide à solutionner, voir à résoudre, les problèmes rencontrés dans la partie : Collaborate with maintainers

Important :
À désinstaller impérativement avant de basculer en D9, après avoir effectués et validés tous les tests de compatibilités.
  • Intégrez la dernière version du module Upgrade Rector avec composer, par exemple comme suit :
composer require 'drupal/upgrade_rector:^1.0@alpha'
  • Installez le module upgrade status : -> [$site-drupal]/admin/modules
  • Videz les caches et .update.php
  • Affichez l'interface de Upgrade Rector : -> [$site-drupal]/admin/reports/upgrade-rector
Notice :
Un rappel : toujours vider les caches après l'installation ou la mise à jour de Drupal et de ses modules et faire un .update.php puis les mises à jour attendues depuis l'update.php.

Les solutions proposées et sourtout, l'application de patch proposé par le module, sont expérimentales.

Important :
À utiliser avec précausion : faites des sauvegardes pour pouvoir revenir à la version précédente..

Problèmes rencontrés et solutions

Corrigez des modules listés dans : Collaborate with maintainers

Corrige la plupart des problèmes

Le plus délicat consiste à rendre compatibles des modules listés dans la zone Collaborate with maintainers qui ne sont pas suivis par leur créateurs/contributeurs, mais qui sont utilisés dans le Drupal à migrer.

La solution la plus fréquente consiste à vérifier si le fichier [nom-du-module].info.yml contient bien la ligne suivante après core: 8.x  :

core_version_requirement: ^8 || ^9

Ensuite, rafraichir la page "Upgrade Status".

07/11/2020 : a solutionné le problème de compatibilité D8 -> D9 pour les modules suivants :

  • pleade_barrio
  • stikyynav
  • responsive_menu
  • view_slideshow_cycle2

Si cela ne corrige pas le problème de compatibilité, essayez "Upgrade Reactor".

Module Pleade

Récupérer une version à jour pour Drupal 9. Par exemple, projet CND.

Remplacez "à la main" le module dans les sources de l'application Drupal à migrer.

The website encountered an unexpected error

Quelques modules proposés à la mise à jour peuvent générer une erreur blocante.

Différentes raisons :

LinkIt

Le choix de ce module est un exemple.

Lors de la rédaction de cette documentation (07/11/2020), la montée en version (07/11/2020) de LinkIt de 4.3.0 vers 6.0.0-beta1 provoque une erreur :

The website encountered an unexpected error. Please try again later.
Error: Class 'Drupal\linkit\AttributeManager' not found in Drupal\Component\DependencyInjection\Container->createService() (line 259 of core/lib/Drupal/Component/DependencyInjection/Container.php).
  • Revenir à la précédente version de LinIt en modifiant composer.json. Ne résout pas le problème. Permet de poursuivre les autres modifications.
  • tentative de passer de 4.3 à une version intermédiaire 5.0.0-beta11 : réussit !
Notice :
Ok : c'est suffisant pour la migration..

Erreur dans Pleade_barrio

L'erreur n'est pas visible directement dans le sous-thème "pleade_barrio", mais dans le thème principale "Boostrap_Barrio".

La correction doit être apportée à Pleade_barrio :

Notice :
Fichier themes/custom/pleade_barrio/pleade_barrio.theme ligne 44, modification path.alias_manager en path_alias.manager..

.

BackUp_migrate

La mise à jour vers la version 5.X de Barrio génére l'erreur suivante :

Error: Call to a member function create() on null in Drupal\backup_migrate\Core\Source\MySQLiSource->exportToFile() (line 47 of modules/contrib/backup_migrate/src/Core/Source/MySQLiSource.php).

(07/11/2020) Corriger avec le patch : https://www.drupal.org/files/issues/backup_migrate-entire_site_filemanager_missing-2732195-17.patch

À intégrer dans les sources Drupal de l'installation, dans Racine de Drupal/patches/ et dans composer.json avec l'ajout de l'application du patch suivant dans la section "patches" :

,
		"patches": {
			"drupal/backup_migrate": {
				"Notice : Error: Call to a member function create() on null in Drupal\backup_migrate\Core\Source\MySQLiSource->exportToFile() (line 47 of modules/contrib/backup_migrate/src/Core/Source/MySQLiSource.php).": "web/patches/backup_migrate-entire_site_filemanager_missing-2732195-17.patch"
			}
		}
Important :
À vérifier car le patch ne peut pas être appliqué et l'erreur disparaît ????.

== Références == <references/>