ItinerisLtd.trellis_install_wp_cli_via_composer

installation_de_wp_cli_via_composer

Rôle Ansible Dernière version GitHub Rôle Ansible CircleCI Score de qualité Ansible Licence GitHub Engager Itineris Suivre Twitter @itineris_ltd Suivre Twitter @TangRufus

Installer WP-CLI via composer sur les serveurs Trellis.

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

  1. 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 !
    
  2. Remplacez le rôle wp-cli par itinerisltd.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] }
    
  3. Installez les rôles galaxy

    trellis galaxy install
    # Alternativement
    ansible-galaxy install -r galaxy.yml --force
    
  4. 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 ?

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 :

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.

À propos du projet

Install WP-CLI via composer on Trellis servers

Installer
ansible-galaxy install ItinerisLtd.trellis_install_wp_cli_via_composer
Licence
mit
Téléchargements
237
Propriétaire
We’re a full-service digital marketing agency that partners with ambitious clients to help them grow