Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Basculer Drupal 8 vers Drupal 9
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.
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.
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'
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
- 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
Les solutions proposées et sourtout, l'application de patch proposé par le module, sont expérimentales.
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 !
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 :
.
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"
}
}
== Références == <references/>