web-dev-qa-db-fra.com

wp-cli 0.14.1 erreur MySQL

Je viens de mettre à jour wp-cli 0.14.1 aujourd'hui et encore une fois avec un problème avec MySQL. Je suis sur Windows, Wampserver et Cygwin.

Lorsque j'ai mis à jour pour la première fois le dernier tour (0.14.0), j'ai eu un problème similaire et j'ai fini par trouver et utiliser les informations d'un github discussion qui était probablement dû au "variables_order" de php. ini. J'ai commenté cela dans mon fichier ini afin de forcer la valeur par défaut de EGPCS au lieu de GPCS. Cela s'en est occupé. Il a été question de résoudre ce problème dans la prochaine version.

Maintenant, j'ai mis à jour la version 0.14.1 et lors de la tentative d'exécution de "wp core config ...." pour créer le fichier wp-config.php, je reçois l'erreur de ligne de commande.

MYSQL_PWD is not recognized as an internal or external command.

Je suis retourné au fil de discussion github et j'ai vu que scribu avait apporté le changement discuté. J'ai suivi le lien qui y mène pour voir si cela apporterait un peu de lumière. Je vois le changement sur la ligne 328 mais je ne sais pas ce que je devrais essayer maintenant, car ce changement semble être ce qui cause mon problème.

Juste pour votre information: je n'ai aucun problème à utiliser mysql à partir de la ligne de commande DOS ou Cygwin, ils font tous deux référence au même exécutable et fonctionnent correctement; parfaitement.

Toute aide serait appréciée.

MISE À JOUR 03/08/2014

REMARQUES: (1) Je ne suis pas intéressé à exposer le nom d'utilisateur ou le mot de passe car ils sont temporaires et c'est sur l'un de mes ordinateurs locaux. (2) Vous verrez que j'utilise le fichier phar dans cette session de débogage. La même chose se produit avec la version "installée" "wp" du dossier bin.

Voici une session de débogage sous PHPStorm dans laquelle j'ai commencé avec cette commande wp-cli:

Boss@Bonkers /cygdrive/c/wamp/www/wpsandbox
$ ../wp-cli-0.14.1.phar core config --dbhost=127.0.0.1 --dbname=wpsandbox --dbuser=root --dbpass=Bonkers --dbprefix=sndbx_

Les points d'arrêt dans utils.php ont été définis pour la ligne 331:

$final_cmd = $cmd . assoc_args_to_str( $assoc_args );

qui crée la commande finale transmise à la ligne 333 pour exécution:

$proc = proc_open( $final_cmd, $descriptors, $pipes );

Voici le image de débogage avec l’état des variables juste avant le traitement des lignes 334 à 339 pour quitter wp-cli et produire le message d’échec sur la ligne de commande bash:

Boss@Bonkers /cygdrive/c/wamp/www/wpsandbox
$ ../wp-cli-0.14.1.phar core config --dbhost=127.0.0.1 --dbname=wpsandbox --dbuser=root --dbpass=Bonkers --dbprefix=sndbx_
'MYSQL_PWD' is not recognized as an internal or external command,
operable program or batch file.

Boss@Bonkers /cygdrive/c/wamp/www/wpsandbox
$ 

Je sais que wp-cli est un logiciel bien construit, donc il me manque probablement quelque chose en cours de route. (Travailler ensemble avec la ligne de commande et PHPStorm prenait beaucoup de temps, car c'est un nouvel outil pour moi.) Je le suivrai si le temps le permet, mais si quelqu'un a des indices, cela aiderait.

MISE À JOUR: 29/03/14

Merci pour le ticket et la fusion de scribu, mais malheureusement, cela ne résout pas le problème. Je reçois la même erreur.

Au début, j'étais confus après avoir re-téléchargé le fichier phar parce que j'avais trouvé exactement le même code qu'avant votre ticket et sa fusion. Un moment WTF. J'ai donc examiné le répertoire de compilation sur GitHub et constaté que ce fichier est daté de 2 jours avant votre fusion, de sorte qu'il n'aurait pas inclus les modifications.

J'ai attrapé la nuit, rechargé le projet et il y avait les changements avec putenv () mais Bash lance la même erreur qu'avant.

Il semble que depuis ce changement wp-cli est incompatible avec Cygwin.

MISE À JOUR: 19/04/2014

La version 0.15.0 a été publiée le 4/15, donc je l'ai installée et j'ai exécuté toutes les commandes ci-dessus. wp-cli a fonctionné comme dans les versions <0.14.1. J'ai comparé 0,14,1 à 0,15,0 et trouvé ce qui suit.

Les lignes 326 à 339 de la v0.14.1 se lisent comme suit:

if ( isset( $assoc_args['pass'] ) ) {
    $cmd = esc_cmd( 'MYSQL_PWD=%s ', $assoc_args['pass'] ) . $cmd;
    unset( $assoc_args['pass'] );
}

$final_cmd = $cmd . assoc_args_to_str( $assoc_args );

$proc = proc_open( $final_cmd, $descriptors, $pipes );
if ( !$proc )
    exit(1);

$r = proc_close( $proc );

if ( $r ) exit( $r );

Les lignes 326 à 342 de la v0.15.0 se lisent maintenant comme suit:

$pass = $assoc_args['pass'];
unset( $assoc_args['pass'] );

$old_pass = getenv( 'MYSQL_PWD' );
putenv( 'MYSQL_PWD=' . $pass );

$final_cmd = $cmd . assoc_args_to_str( $assoc_args );

$proc = proc_open( $final_cmd, $descriptors, $pipes );
if ( !$proc )
    exit(1);

$r = proc_close( $proc );

putenv( 'MYSQL_PWD=' . $old_pass );

if ( $r ) exit( $r );

Cela a résolu le problème. wp-cli travaille maintenant à nouveau avec Cygwin, du moins les commandes que j’ai utilisées ici ainsi que quelques autres nécessitant de dépasser ce point - l’installation.

8
user1640896

Il semble que Cygwin ne supporte pas les variables d'environnement en ligne, contrairement à Bash.

A ouvert un ticket: https://github.com/wp-cli/wp-cli/issues/1086

4
scribu