ItinerisLtd.trellis_install_wp_cli_via_composer
installation_de_wp_cli_via_composer
Installer WP-CLI via composer sur les serveurs Trellis.
- Objectif
- Variables du Rôle
- Exigences
- Installation
- FAQ
- Comment installer seulement certaines commandes au lieu de l'ensemble du paquet WP-CLI ?
- Que faire lorsque composer ne peut pas installer de paquets en raison de contraintes de version conflictuelles ?
- Comment vérifier que WP-CLI est installé via composer ?
- Est-ce idempotent ou déterministe ?
- Ça a l'air génial. Où puis-je trouver d'autres bonnes choses comme ça ?
- Où puis-je donner des avis :star::star::star::star::star: ?
- Tests
- Retour d'information
- Sécurité
- Crédits
- Licence
Objectif
Le Problème
[Depuis WP-CLI v2.0.0,] le lot de dépendances le plus problématique, la dépendance sur une ancienne version de Symfony, a disparu. Le seul composant Symfony que nous avons encore est
symfony/finder
, car il n’y a pas de limite de version supérieure pour celui-ci.-- https://make.wordpress.org/cli/2018/08/08/wp-cli-v2-0-0-release-notes/
Cependant, les archives phar contiennent les dépendances de WP-CLI. Ces dépendances sont toujours chargées à partir du phar. En conséquence, leurs versions sont verrouillées.
Par exemple : WP-CLI v2.4.0 comprend symfony/process
v2.8.5 (comme dépendance de symfony/finder
). Supposons que nous ayons my-awesome-command
qui nécessite symfony/process:5.0.0
. $ wp package install my-awesome-command
installe symfony/process
v5.0.0 comme prévu. Cependant, symfony/process
v2.8.5 (provenant du phar de WP-CLI) est toujours utilisé ; la version plus récente de symfony/process
(exigée par my-awesome-command
) est ignorée. Ainsi, my-awesome-command
échoue lorsqu'il essaie d'utiliser symfony/process
.
$ wp shell
wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
["name"]=>
string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // Notez qu'il est chargé à partir du phar de WP-CLI.
phar:///usr/bin/wp/vendor/symfony/process/Process.php
Ce problème affecte symfony/finder
et ses dépendances.
La Solution
Installer WP-CLI via composer résout le problème.
$ wp shell
wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
["name"]=>
string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // Notez qu'il est chargé à partir du dossier "vendor" de composer.
/home/web/.composer/vendor/symfony/process/Process.php
Variables du Rôle
# Paquets Composer à supprimer avant l'installation de WP-CLI
# Par défaut : []
wp_cli_composer_global_remove_packages:
- wp-cli/wp-cli-bundle
- psy/psysh
# Paquets Composer à installer
# Par défaut : "wp-cli/wp-cli-bundle:{{ wp_cli_version }}"
wp_cli_composer_global_require_packages:
- "wp-cli/wp-cli:2.4.0"
- "wp-cli/package-command:^2"
- "psy/psysh:^0.9.12"
- "xxx/yyy:'^1.2.3 || ^2.2.3'"
# Paquets WP-CLI à installer
# Par défaut : []
# Pris de https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L10
wp_cli_packages:
- "typisttech/image-optimize-command:@stable"
- "[email protected]:Yoast/wp-cli-faker.git"
# Chemin de WP-CLI
# Par défaut : /usr/bin/wp
# Pris de https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L3
wp_cli_bin_path: /usr/bin/wp
# Chemin de complétion bash de WP-CLI
# Par défaut : /etc/bash_completion.d/wp-completion.bash
# Pris de https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L9
wp_cli_completion_path: /etc/bash_completion.d/wp-completion.bash
Exigences
- Trellis v1.3.0 ou plus
- Ansible v2.7.0 ou plus
- Python v3.7.6 ou plus
Installation
Ajoutez
itinerisltd.trellis_install_wp_cli_via_composer
àgalaxy.yml
# galaxy.yml + - src: itinerisltd.trellis_install_wp_cli_via_composer + version: XXX.YYY.ZZZ # Vérifiez la dernière version !
Remplacez le rôle
wp-cli
paritinerisltd.trellis_install_wp_cli_via_composer
# server.yml - - { role: wp-cli, tags: [wp-cli] } + - { role: itinerisltd.trellis_install_wp_cli_via_composer, tags: [wp-cli] }
Installez les rôles galaxy
trellis galaxy install # Alternativement ansible-galaxy install -r galaxy.yml --force
Re-provisionnez
trellis provision production # Alternativement ansible-playbook server.yml -e env=production
FAQ
Comment installer seulement certaines commandes au lieu de l'ensemble du paquet WP-CLI ?
Par défaut, l'ensemble du paquet WP-CLI (wp-cli/wp-cli-bundle
) est installé. Si vous souhaitez garder vos serveurs légers, installez les paquets de commande de manière sélective :
wp_cli_composer_global_remove_packages:
- wp-cli/wp-cli-bundle
wp_cli_composer_global_require_packages:
# Requis : le framework WP-CLI
- "wp-cli/wp-cli:^2.4"
# Installez uniquement les commandes dont vous avez besoin :
- "wp-cli/core-command:^2"
- "wp-cli/cron-command:^2"
- "wp-cli/db-command:^2"
- "wp-cli/package-command:^2"
Que faire lorsque composer ne peut pas installer de paquets en raison de contraintes de version conflictuelles ?
Vérifiez les paquets composer existants. Ensuite, changez les contraintes de version via les variables de rôle. Vous devrez peut-être désinstaller certains paquets.
Ces commandes sont vos alliées :
composer global show
cat $(composer config --global --absolute home)/composer.json
wp package list
cat $(wp package path)/composer.json
Comment vérifier que WP-CLI est installé via composer ?
# Mauvais : Installé via Trellis, c'est-à-dire via phar
$ wp cli info
Répertoire racine de WP-CLI : phar://wp-cli.phar/vendor/wp-cli/wp-cli
# Bon : Installé via ce rôle, c'est-à-dire via composer
$ wp cli info
Répertoire racine de WP-CLI : /home/web/.composer/vendor/wp-cli/wp-cli
Est-ce idempotent ou déterministe ?
Non.
Des versions spécifiques exactes de paquets peuvent aider, mais vous devrez les gérer manuellement.
Ça a l'air génial. Où puis-je trouver d'autres bonnes choses comme ça ?
- Articles sur le blog d'Itineris
- Plus de projets sur le profil GitHub d'Itineris
- Plus de plugins sur Itineris et TangRufus sur wp.org
- Suivez @itineris_ltd et @TangRufus sur Twitter
- Engagez Itineris pour construire votre prochain site génial
Où puis-je donner des avis :star::star::star::star::star: ?
Merci ! Content que cela vous plaise. Il est important de faire savoir à mon directeur que quelqu'un utilise ce projet. Puisque ce projet n'est pas hébergé sur wordpress.org, veuillez envisager de :
- tweeter quelque chose de positif en mentionnant @itineris_ltd et @TangRufus
- :star: donner un ⭐ à ce dépot Github
- :eyes: suivre ce dépôt Github
- écrire des articles de blog
- soumettre des pull requests
- engager Itineris
Tests
ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
Retour d'information
Veuillez donner un retour d'information ! Nous voulons rendre cette bibliothèque utile dans autant de projets que possible. Veuillez soumettre un problème et indiquer ce que vous aimez ou n'aimez pas, ou forker le projet et faire des suggestions. Aucun problème n'est trop petit.
Sécurité
Si vous découvrez des problèmes liés à la sécurité, veuillez envoyer un email à [email protected] au lieu d'utiliser le suivi des problèmes.
Crédits
installation_de_wp_cli_via_composer est un projet de Itineris Limited créé par Tang Rufus.
La liste complète des contributeurs peut être trouvée ici.
Licence
installation_de_wp_cli_via_composer est publié sous la Licence MIT.
ansible-galaxy install ItinerisLtd.trellis_install_wp_cli_via_composer