écrit le 31-10-2017 - mis à jour le 13 janvier 2021
Composer
Si comme moi, tu refusais de quitter l’îlot de tes habitudes de drupalien version 7 (drush, git), sache que ça ne va plus être possible. Tel le pouvoir madrilène qui dicte ses lois à la Catalogne, drupal version 8 t’impose COMPOSER !
En un mot comme en cent, "composer" est un gestionnaire de dépendances. Que cela veut-il dire ?
Principalement que dorénavant quand:
-
tu installeras* un module en local, tu n’exécutera plus un vulgaire drush dl devel (par exemple) mais un magnifique
composer require drupal/devel
(drush en devel sera pour autant toujours utile),dans le cas où il te faut installer une version spécifique :
composer require drupal/linkit:^6.0
-
tu voudras supprimer* un module drupal, tu enverras un implacable
composer remove drupal/nom_du_module
-
tu mettras à jour* un module drupal, tu n'utiliseras plus drush up monmodule mais
composer update drupal/nom_du_module
-
tu mettras à jour ta prod, tu n’exécuteras plus un ordinaire drush updb après un git pull mais un élégant composer
drush cim //pour config import<:pre>
Ce dernier se basera sur les fichiers composer.json et composer.lock pour savoir quels sont les modules dont il a besoin.
* Attention
Composer est un gestionnaire de paquet ce qui veut dire, en résumé, qu'il s'assure que les projets et modules que vous installez et désinstallez sont compatibles entre eux mais en réalité, il n'installe rien ou ne désinstalle rien lui même ! Il se content d'aller chercher le code compatible et c'est ensuite à vous d'activer ou de désactiver. Donc avant d'utiliser les commandes :
- composer require, il faut ensuite activer (avec drush par exemple) le module concerné
- composer remove, il faut auparavant avoir désactivé le module concerné
- composer update, il faut ensuite lancer le processus de mise à jour de la base de données (drush updb par exemple)
Installer composer
C’est facile :
-
il faut d’abord le télécharger : https://getcomposer.org/download/
-
puis le mettre dans ton PATH : https://getcomposer.org/doc/00-intro.md
Exporter et importer la config
Vous pouvez constater qu’après avoir installé drupal 8.5 (ou supérieur), votre fichier settings.php contient la ligne
$config_directories['sync'] = '../config/sync';
Cela indique que les variables de configuration (comme le nom de votre site ou encore les modules activés, enfin tout ce qui fait de votre site drupal, un site web spécifique) seront exportées dans un répertoire hors d’atteinte d’une requête http (répertoire web), dans le répertoire config/sync.
Logiquement, il vous suffira d’exporter la config de votre serveur de test pour l’importer ensuite sur vos serveurs de préprod puis de prod.
- Exporter la config : drush cex
- Importer la config : drush cim
1 Installer un site drupal la première fois depuis une configuration existante
Pour que votre futur site de prod ou de preprod puisse être directement installé en prenant compte votre configuration, il va falloir utiliser le module « configuration installer ».
Pour cela, en local, exécuter :
composer require drupal/config_installer drush cex git add ../config git commit -m "config exported." git push
Sur le serveur du site à installer d’après votre configuration locale :
git pull composer install
Puis :
- vérifier que le répertoire web/profiles/contrib/config_installer est bien présent,
- vérifier que le fichier .htaccess est présent et que le mode rewrite d'apache est activé,
- lancer l’installation de votre site dans le navigateur et dès la deuxième étape, choisissez le profil d’installation « Configuration installer »,
déroulez l’installation et vous verrez qu’à la 5ième étape, le champ « Synchronisation directory » aura comme valeur par défaut « ../config/sync ». Toutes les variables de configuration sont bien prises en compte. Si l'installation plante, c'est sans doute un problème de timeout. N'hésitez pas à relancer l'install en lançant un simple rechargement de la page (F5).
ou lancer l'install depuis drush mais je n'y suis pas encore arrivé (j'ai testé :
drush site-install --verbose --locale=fr config_installer config_installer_sync_configure_form.sync_directory=../config/sync --yes (en admettant que l'on se trouve dans le fichier racine de drupal soit par défaut web) ... mais ça ne fonctionne pas ... il faut creuser. Si vous avez la solution, merci de me l'envoyer à contact@coopernet.fr
2 Mettre à jour les modifications de configuration exportées tout au long de la vie de votre site web
Lorsque vous apportez des modifications de configuration en local, il vous faudra les exporter, les "commiter" puis les importer sur vos serveurs de pré-prod et de production.
Notez au passage qu'il faut exporter composer.json et composer.lock.
Dans composer.json, on va trouver des informations du type : "drupal/entity_browser": "^2.0.0"
ce qui veut dire que vous voulez installer le module entity_browser à partir de sa version 2.0
Dans composer.lock, on va trouver des informations du type :
"name": "drupal/entity_browser",
"version": "2.0.0-alpha3",
Ce qui veut dire que c'est exactement la version 2.0.0-alpha3 qui sera installé
On a donc besoin de "commiter" ces deux fichiers pour installer exactement les mêmes versions des modules de drupal en en local et en prod.
Pour exporter :
drush cex
Pour le versioning, utilisez git de façon classique :
git add xxx git ci - m "Votre message de commit" git push
Pour importer
git pull composer install drush cim drush cr
3 Drush
Pour pouvoir travailler correctement avec drupal 8.4 et supérieur, il faut installer au minimum la version 8.1.15 :
composer global require drush/drush:8.1.15
Attention également à utiliser dans le répertoire web pour la plupart des commandes (ex : drush en devel)
4 Les commandes à connaître pour s'en sortir dans ce nouveau monde :
Mettre à jour un module contrib particulier
composer update drupal/nom_du_module
Mettre à jour le coeur de drupal
composer update drupal/core --with-dependencies drush updatedb drush cr
http://www.coopernet.fr/infos/drupal-8-4-composer-drush-git-config-export-et-importActiver un module, en pour enable (territoire connu)
drush en nom_du_module
Vider tous les caches, équivalent à l'ancien drush cc all
drush cr
Désinstaller un module contrib
composer remove drupal/nom_du modulecontrib
Activer / désinstaller un module custom (u pour uninstall)
Attention, composer ne s'occupe que des modules contrib. Les modules custom ne le concerne pas. Ainsi pour un activer et désinstaller un module custom, il faudra utiliser les commandes drush usuelles :
drush en nom_du module_custom
drush pmu nom_du module-custom
Eviter les problèmes de mise à jour de la base de données
Si lors de la mise à jour de drupal vous tombez sur une erreur de type : session_id(): Cannot change session id when headers already sent AbstractProxy.php:94 > [notice] Update started: system_update_8804 > [error] SQLSTATE[23000]: Integrity constraint violation: 1062, il est probable que ce soit lié au fait que vous n'avez pas vraiment supprimer toutes les tables de votre ancienne base de données. En effet, exécuter la commande
drush sql-cli < chemin/vers/votrebd.sql
ne supprime pas toutes les tables. Il faut donc commencer par :
drush sql-drop
Problème pour passer de drupal 8.6 à 8.8
Sans que je ne puisse exactement vous expliquer pourquoi, je vous livre ce que j'ai dû faire pour passer de drupal 8.6 à drupal 8.8 avec composer
composer require drupal/core:^8.8.1 --no-update composer require webflo/drupal-core-require-dev:^8.8.1 --no-update composer update drupal/core webflo/drupal-core-require-dev --with-dependencies
Pour passer de 8.7 à 8.8
Pour passer de 8.8.1 à 8.9.11
composer update drupal/core --with-dependencies composer require drupal/core:^8.8.12 --no-update composer require webflo/drupal-core-require-dev:^8.8.12 --no-update composer update drupal/core webflo/drupal-core-require-dev --with-dependencies
- Log in to post comments