Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)
Synchronisation Drupal : site dev avec site prod
Pré-requis :
[modifier | modifier le wikicode]Voir les concepts de sites Drupal : https://www.drupal.org/fr/docs/user_guide/fr/install-dev-sites.html
Pour synchroniser un site de développement vers le site de production, il faut avoir au préalable :
- Créer un site Drupal de développement : https://www.drupal.org/fr/docs/user_guide/fr/install-dev-making.html
- Dupliquer ce site Drupal pour créer le site de production (sur le même serveur ou le serveur de production)
Voir : https://www.drupal.org/fr/docs/user_guide/fr/extend-config-versions.html
Étapes pas à pas
[modifier | modifier le wikicode]Mise à jour du site de développement
[modifier | modifier le wikicode]Faites une copie du fichier /composer.json
composer update
Récupérez le fichier /composer.json qui va être utilisée pour la mise à jour du site en production.
Voir ci-dessous les étapes détaillées pour la mise à jour de Drupal et les erreurs possibles : Mise à jour
Export de la configuration de synchronisation
[modifier | modifier le wikicode][URL]/admin/config/development/configuration/full/export
Une archive est téléchargée sur votre PC.
Mise à jour du Drupal en production
[modifier | modifier le wikicode]Avant de faire la mise à jour :
Sauvegarde du site de production
[modifier | modifier le wikicode]tar czvf internet-20221212.tar.gz internet
Sauvegarde de la base de données
[modifier | modifier le wikicode]Identifiez la base à sauvegarder, puis sauvegardez. Voir le fichier /sites/default/setting.php pour identifier la base et le mot de passe.
'database' => '[LE-NOM_DE-LA-BASE]',
'username' => 'ajlsm',
'password' => '[LE-MOT-DE-PASSE',
Vérifications des tables (Optionnel)
[modifier | modifier le wikicode]Quelle est la table utilisée ?
Exemple :
$ mysql -u ajlsm -p -e "show databases;"
Enter password:
+--------------------+
| Database |
+--------------------+
| drupal_internet |
| drupal_preprod |
| drupal_slecture |
| information_schema |
| performance_schema |
| pleade_internet |
| pleade_persistant |
| pleade_preprod |
| pleade_slecture |
+--------------------+
Vérifier les fichiers setting.php de chaque site ou sous-sites.
[modifier | modifier le wikicode]Dans le contexte de cette migration, une seule table est utilisée pour les 3 sites et le répertoire "default".
Les contenus modifiés se répercutent sur le Drupal de pré-production, de salle de lecture et pour Internet.
- défault : drupal_preprod
- pandor-preprod.u-bourgogne.fr : drupal_preprod
- pandor-salledelecture.u-bourgogne.fr : drupal_preprod
- pandor2022.u-bourgogne.fr : drupal_preprod
Sauvegarde (dump) de la base de données
[modifier | modifier le wikicode]Par exemple :
mysqldump -u ajlsm -p drupal_preprod > dump-internet-20221212.sql
Dans notre contexte, le dump échoue avec l’utilisateur « ajlsm »
mysqldump -u root -p drupal_preprod > dump-internet-20221212.sql
Mise à jour de Drupal
[modifier | modifier le wikicode]- Sauvegarde du fichier /composer.json
- Remplacement du contenu du fichier /composer.json par celui du fichier /composer.json du site de développement : Copie de composer.json MSH-recherche vers pandor 2022
- Mise à jour
Lancer une mise à jour de contrôle. Ne fait pas la mise à jour et signale les problèmes potentiels à corriger avant la mise à jour.
$ composer update —dry-run
Si OK, lancer la mise à jour
$ composer update
Si OK, vider les caches Drupal :
$ ./vendor/bin/drush cr
Si OK, le prompt renvoie :
[success] Cache rebuild complete.
Si OK, terminez la mise à jour depuis l'interface d'administration de Drupal en allant sur la page : [URL].update.php
Si NOK, un message affiche les erreurs à corriger.
$ drush ws
Une fois l'erreur(s) corrigée(s), vider les caches sans erreur :
$ ./vendor/bin/drush cr
[success] Cache rebuild complete.
Voir ci-dessous la liste (non exhaustive) des problèmes rencontrés dans notre contexte :
Erreurs rencontrées
[modifier | modifier le wikicode]Composer doit être mis à jour vers la V2
[modifier | modifier le wikicode]Lors du passage à PHP8,
$ composer update
renvoie des erreurs de type :
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:62
Deprecation Notice: Required parameter $path follows optional parameter $schema in phar:///usr/local/bin/composer/vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php:108
Deprecation Notice: Method ReflectionParameter::getClass() is deprecated in phar:///usr/local/bin/composer/src/Composer/Repository/RepositoryManager.php:130
Vérifier la version de Composer
$ composer
Mettre à jour si la version est inférieure à 2
$ composer self-update
</syntaxhighlight>
Un fichier de test renvoie une erreur à corriger
[modifier | modifier le wikicode]Drupal\Core\Config\UnsupportedDataTypeConfigException : Invalid data type in config invalid_file.libraries, found in file ./core/tests/Drupal/Tests/Core/Asset/library_test_files/invalid_file.libraries.yml: Indentation problem at line 3 (near " key2: value2"). dans Drupal\Core\Config\FileStorage->read() (ligne 118 de /home/ajlsm/recette/msh-dijon/drupal/internet/web/core/lib/Drupal/Core/Config/FileStorage.php).
Modifiez le fichier /core/tests/Drupal/Tests/Core/Asset/library_test_files/invalid_file.libraries.yml
example:
key1: value1
key2: value2
À remplacer par :
example:
key1: value1
key2: value2
Pré-requis d'un module ou du thème non conforme
[modifier | modifier le wikicode]In InfoParserDynamic.php line 88:
The 'core_version_requirement' constraint (^9.4 || ^10) requires the 'core' key not be set in themes/contrib/bootstrap_barrio/bootstrap_barrio.info.yml
Solution : Modifiez le fichier themes/contrib/bootstrap_barrio/bootstrap_barrio.info.yml en remplaçant par :
core_version_requirement: ^9.4 || ^10
Par :
core_version_requirement: ^8 || ^9 || ^10
pour garder la compatibilité montante.
Erreur avec le module eu-compliance
[modifier | modifier le wikicode]Could not read the EU Cookie Compliance JavaScript file that is used to handle disabled scripts. There may be a problem with your file system or the file may be missing. Try accessing the EU Cookie Compliance settings page and re-save the form.
Solution : débranchez le consentement et on met un consentement tacite.
Synchronisation
[modifier | modifier le wikicode]Cas de la montée en version de d8 < 8.9.20 vers D9.5.x
[modifier | modifier le wikicode]Exemple : Crop Api avec l'erreur :
The installed version of the Crop API module is too old to update. Update to an intermediate version first (last removed version: 8005, installed version: 8003).
Seule solution : désinstaller le module.
Problème majeur : la désinstallation d'un module supprime le module et tout ce qu'il utilise.
Pour Crop Api cela correspond à : les styles d'images créés, les crop styles, et leur utilisation dans les contenus, la présence de crop api dans la structure des contenus (gestion des champs, affichage du formulaire, etc)...
Pour le projet Salamandre, l'utilisation de Crop Api concernait le type de contenu "Article", qui n'avait jamais été utilisé.
On a choisi de le supprimer pour finaliser la mise à jour et lancer le .update.php. Ensuite, on a ré-installé le module, re-créé tous les styles d'images, de crop style, et ré-intégré le crop style dans la structure du contenu "Article".
Par contre, tous les crop d'images placés dans les contenus disparaissent.
Ce n'est pas une solution pour des projets qui ont utilisés massivement Crop Api.
Préparation de la synchronisation
[modifier | modifier le wikicode]- Le répertoire de synchronisation doit être paramétré dans le(s) fichier(s) setting.php.
- Le(s) répertoire(s) suivant existe /config/sync
Selon la version de PHP installé, ce paramètre peut être :
$config_directories['sync'] = '../config/sync';
ou :
$settings['config_sync_directory'] = '../config/sync';
Nettoyage du contenu de ../config/sync
[modifier | modifier le wikicode]Avant de lancer l'importation de la configuration de synchronisation, assurez vous que le répertoire /config/sync est vide.
Dans le cas contraire, un message d'erreur s'affiche sur la page : [URL]/admin/config/development/configuration
Lancement de la synchronisation
[modifier | modifier le wikicode]Depuis la page [URL]/admin/config/development/configuration/full/import, cliquer sur le bouton "Importer" et pointez sur l'archive de la configuration du site de développement.
La page qui se charge permet de visualiser les modifications qui peuvent être importée, une par une.
Cliquez sur "Importer".
Erreurs possibles
[modifier | modifier le wikicode]Drupal n'est pas mis à jour avec la configuration du site de développement (composer.json)
[modifier | modifier le wikicode]Si la mise à jour du Drupal de production n'a pas été faite avant, l'importation échoue.
Exemple de message d'erreur :
Solution : mettre à jour Drupal en production.
Configuration non cohérente
[modifier | modifier le wikicode]Dans notre contexte, un fichier liée à un module non installé pose problème : language.content_settings.crop.focal_point.yml
Solution : Suppression du fichier dans le répertoire de synchronisation /config/sync/
sudo rm language.content_settings.crop.focal_point.yml
Adaptation de la configuration au contexte de production
[modifier | modifier le wikicode]Certains modules ou paramétrage liés au site de développement doivent être modifiés.
Voir les bonnes pratiques : https://www.drupal.org/fr/docs/user_guide/fr/extend-config-versions.html#s-tapes
Modifications dans notre contexte
[modifier | modifier le wikicode]- Désactivation langue switch pour les non authentifiés
- Désinstallation du module devel
- Mise à jour de preprod et salle de lecture : c’est la même base de données, donc OK
- Remonter le module Pleade (Romain)
-> Reste mise à jour Pleade à faire.