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

Migration Salamandre Drupal 10

De AJLSM
Version datée du 20 septembre 2024 à 10:43 par Jlarvers (discussion | contributions)
(diff) ← Version précédente | Version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

La montée en version D8 vers D9.5.4 limite les problèmes de compatibilité.

Cependant, les problèmes sont plus difficile à régler pour les modules contribués anciens, car les développeurs ne les maintiennent plus.

Deux solutions :

  1. Solliciter les développeurs et attendre un correctif (patch),
  2. Réaliser le patch.

La montée en version s'effectue en deux temps :

  1. Sur notre serveur de recette
  2. Sur Salamandre en production

Préparation côté Salamandre

[modifier | modifier le wikicode]
  1. Mettre à jour Drupal Salamandre (9.5.4 -> 9.5.5). Lancer un composer update --dry-run avant. Si problème, analyser avec $ drush ws, $ drush cr, vidage cache dans Drupal et update.php
  2. Synchronisation > Exportez la configuration : /admin/config/development/configuration/full/export
  3. Copier le fichier composer.json

Serveur de recette CDF

[modifier | modifier le wikicode]

La montée en version de Drupal 8 vers Drupal 9.5.4 est récente.

On ne ré-installe pas la version de production sur Mercure (serveur de recette).

Notice :
Pour les autres migration de Drupal 9 vers D10, il faut faire une copie du Drupal en production, et le ré-installer sur Mercure avant de faire la montée en version..

Synchronisation de cdf-recette

[modifier | modifier le wikicode]
  1. Vider le contenu du répertoire /config/sync/ et le rendre inscriptible.
  2. Remplacer le contenu du fichier composer.json par celui de composer.json de Drupal Salamandre.
  3. Mettre à jour Drupal cdf-recette. Lancer un composer update --dry-run avant. Si problème, analyser avec $ drush ws, $ drush cr, vidage cache dans Drupal et update.php
  4. Synchronisation > Importer la configuration : /admin/config/development/configuration/full/import

L'import remonte 3 différences. On importe. Pas de problème.

Upgrade status

[modifier | modifier le wikicode]

Si non présent, intaller la version US pour la montée en version D9 -> D10

composer require 'drupal/upgrade_status:^4'

Retrait des modules obsolètes

[modifier | modifier le wikicode]

Désinstaller depuis /admin/modules/uninstall : color, Quick Edit et RDF.

Retrait des modules installés et non utilisés

[modifier | modifier le wikicode]

Module à supprimer : ckeditor_media_embed

  1. Supprimer la ligne suivante dans le fichier composer.json :
    "drupal/ckeditor_media_embed": "^1.11",
    
  2. Mettre à jour Drupal : composer update

Modules dont la non compatibilité peut être corrigée avec rector

[modifier | modifier le wikicode]

Ne fonctionne pas dans l'environnement.

Les modules concernés sont 2 modules installés "à la main" par Indelebil : /web/modules/custom/indelebil.

Ils sont aussi installés dans les modules contribués où ils sont potentiellement à jour : /web/modules/contrib/indelebil.

Ok pour le module bg_image_formatter

Nok pour le module cache_clear_shortcut.

Chercher les issues dans Drupal pour ce module. La plupart des modules non supportés ont eu un patch généré automatiquement. À modifier dans le code du module.

Ne fonctionne pas après modifications dans le code.

Modules non compatible et supprimés

[modifier | modifier le wikicode]
  • Menu Export
  • cache_clear_shortcut

Problèmes à corriger manuellement

[modifier | modifier le wikicode]
Compatibilité multi-versions
[modifier | modifier le wikicode]

La plupart des problèmes rencontrés sont résolus en ajoutant le core_requirement dans les fichiers module.info.yml

core_version_requirement: ^8.9 || ^9 || ^10

Pour identifier rapidement les fichiers concernés, lancer un grep dans le répertoire drupal/web.

Par exemple :

grep -rnw '/home/ajlsm/recette/cdf/drupal/web/' -e 'core_version_requirement'

Ce grep renvoie le path et le nom du fichier, la ligne où l'expression est trouvée et l'expression.

On corrige tous ceux qui ne contiennent pas ce core_requirement, ou dont le core_requirement est incomplet.

Par exemple :

core: 8.x
core_version_requirement: ^8.9 || ^9
Modification du code twig 1 -> twig 2
[modifier | modifier le wikicode]

Concerne le thème utilisé par Indelebil pour charger la page d'accueil avec le slider et les vignettes d'accès aux rubriques (formulaires de recherches).

Dans le template : web/themes/custom/pleade_barrio/templates/views-view-fields--sous-ensembles.html.twig, le code twig utilisé pour "for" et "if" est déprécié.

Upgrade Status précise le type d'erreur :

Using an "if" condition on "for" tag in 
"themes/custom/pleade_barrio/templates/views-view-fields--sous-ensembles.html.twig" 
at line 2 is deprecated since Twig 2.10.0, use a "filter" filter or an "if" condition 
inside the "for" body instead (if your condition depends on a variable 
updated inside the loop). See https://drupal.org/node/3071078.

On doit utiliser un "filter".

Remplacement du code de la ligne 2 :

{% for key, field in fields if key != 'field_image_list' -%}

Par :

{% for key, field in fields|filter((field, key) => field and key != 'field_image_list') -%}

Modules mis à jour dans composer.json

[modifier | modifier le wikicode]

Après la tentative de mise à jour vers D10 avec :

composer update --dry-run

Plusieurs modules doivent être mis à jour dans le fichier composer.json pour passer les erreurs.

Voici le diff entre les deux versions de composer.json : "<" après (configuration à appliquer) et ">" avant (doit être remplacé) :

40c40
<         "drupal/back_to_top": "^3.0",
---
>         "drupal/back_to_top": "^1.0",
42,51c42,54
<         "drupal/bg_image_formatter": "^1.16",
<         "drupal/block_styles_bootstrap": "^2",
<         "drupal/bootstrap_barrio": "^5",
<         "drupal/captcha": "^2.0@beta",
<         "drupal/core": "10.0.5 as 9.5.5",
<         "drupal/core-composer-scaffold": "^10",
<         "drupal/core-project-message": "^10",
<         "drupal/core-recommended": "^10",
<         "drupal/crop": "^2.3",
<         "drupal/ctools": "^4.0",
---
>         "drupal/bg_image_formatter": "^1.15",
>         "drupal/block_styles_bootstrap": "^1.2",
>         "drupal/bootstrap_barrio": "^4.33",
>         "drupal/cache_clear_shortcut": "^2.0",
>         "drupal/captcha": "^1.0@beta",
>         "drupal/ckeditor_media_embed": "^1.11",
>         "drupal/console": "^1.0.2",
>         "drupal/core": "^9",
>         "drupal/core-composer-scaffold": "^9",
>         "drupal/core-project-message": "^9",
>         "drupal/core-recommended": "^9",
>         "drupal/crop": "^2.0",
>         "drupal/ctools": "^3.2",
54c57
<         "drupal/google_analytics": "^4.0",
---
>         "drupal/google_analytics": "^3.0",
57,58c60
<         "drupal/imce": "^3",
<         "drupal/jquery_ui": "^1.6",
---
>         "drupal/imce": "^2.3",
60a63
>         "drupal/menu_export": "^1.2",
69c72
<         "drupal/mimemail": "^1.x-dev@dev",
---
>         "drupal/mimemail": "^1.0@alpha",
76c79
<         "drupal/simple_sitemap": "^4.1",
---
>         "drupal/simple_sitemap": "^3.3",
85c88
<         "drupal/views_bootstrap": "^5.5@alpha",
---
>         "drupal/views_bootstrap": "^4.1",
90,91c93
<         "drush/drush": "^11",
<         "symfony/yaml": "^6.2",
---
>         "drush/drush": "^10.6",
153,157d154
<             }
<         },
<         "patches": {
<             "drupal/social_media": {
<             "Notice : Compatible D10": "web/patches/social_media.patch"
Important :
Plusieurs modules ne sont pas compatibles avec D10, comme back_to_top, ou console, menu_export, clear_cache_shortcut,.. Tous ceux qui ne sont pas nécessaires ont été retirés, sauf back_to_top, toujours utilisé..

En attendant une mise à jour de back_to_top par le contributeur, il faut garder la rétro-compatibilité avec D9 comme suit :

"drupal/core": "10.0.5 as 9.5.5"

Correction du code par patch

[modifier | modifier le wikicode]

Correction du module social_media par patch (cf. ci-dessus pour voir l'appel du patch).

Correction classique du thème Barrio

[modifier | modifier le wikicode]

Génère un problème d'affichage et un conflit avec le module Pleade.

Pour corriger, commenter les lignes 579 à 593 du fichier : web/themes/contrib/bootstrap_barrio/bootstrap_barrio.theme

Préparation synchronisation vers Salamandre

[modifier | modifier le wikicode]
  1. Sauvegarde BD et archive de Drupal/internet
  2. Export de la configuration de synchronisation : /admin/config/development/configuration/full/export
  3. Copie du contenu du fichier composer.json de cdf/drupal vers salamandre/home/ajlsm/drupal/internet/
  4. Sur Salamandre : vider le contenu du répertoire salamandre/home/ajlsm/drupal/internet/config/sync/

Synchronisation

[modifier | modifier le wikicode]

composer update puis synchronisation

[modifier | modifier le wikicode]
Important :
La suite est dépréciée.

Suite aux migrations précédentes, on veut lancé la synchronisation UNIQUEMENT après fait un composer update avec le contenu du fichier composer.json de la recette.

Après avoir remplacé la version composer.json de cdf vers Salamandre :

  1. Lancer un composer update --dry-run : Ok
  2. Lancer un composer update : Ok
  3. Lancée les commandes :
  • $ drush cr : ok,
  • $ drush ws : nok, énormément d'erreurs.
Notice :
C'est le coup de l'œuf et la poule. Comme la synchronisation des configurations n'est pas faites, la mise à jour vers D10 n'est pas possible. Page blanche sur Salamandre... Tentative de corrections non prises en compte. Impossible de lancer la synchronisation et le update.

Synchronisation puis composer update

[modifier | modifier le wikicode]
  1. Retour en arrière : remplacement du contenu de composer.json par l'original (salamandre 9.5.5).
  2. Lancer un composer update --dry-run : Ok
  3. Lancer un composer update : Ok
  4. $ drush cr : ok
  5. $ drush ws : Problème Thème barrio habituel : Error: Call to a member function bundle() on string in bootstrap_barrio_theme_suggestions_page_alter() (line 590) - Commenter toute la section ligne 579 à 593 (Voir avec $ drush ws quelle est la ligne à commenter)
  6. On retrouve Drupal : vidage des caches
  7. S'assurer que le répertoire de salamandre drupal/internet/config/sync est vide
  8. Import de la configuration de synchronisation de la recette : admin/config/development/configuration/full/import
  9. Synchroniser : tout importer : OK
  10. Vider les caches Drupal
  11. lancer /update.php : L'update remonte des erreurs de configuration qui doivent être corrigés pour finaliser l'update. Quelques modules n'ont pas leur fichier .info.yml à jour avec les bons requirements. Faire les corrections.
  12. Update : OK.
  13. Vider les caches : OK