Я только что обновил до wp-cli 0.14.1 сегодня и снова возникла проблема с MySQL. Я на Windows, Wampserver и Cygwin.
Когда я впервые обновился до последней версии (0.14.0), у меня была похожая проблема, и я обнаружил и использовал информацию из обсуждения на github, которая, скорее всего, была вызвана «variable_order» в php.ini. Я прокомментировал это в своем INI-файле, чтобы заставить EGPCS по умолчанию вместо GPCS. Это позаботилось об этом. Было упоминание об исправлении этого в следующем выпуске.
Теперь я обновился до 0.14.1 и при попытке запустить «wp core config ....» для создания файла wp-config.php я получаю ошибку командной строки
MYSQL_PWD is not recognized as an internal or external command.
Я вернулся к ветке github и увидел, что scribu действительно внес изменения, которые обсуждались. Я перешел по ссылке на него, чтобы посмотреть, не пролил ли он свет. Я вижу изменение в строке 328, но не знаю, что мне следует попробовать сейчас, так как это изменение, похоже, и вызывает мою проблему.
Просто к сведению: у меня нет проблем с использованием mysql из командной строки DOS или Cygwin, они оба ссылаются на один и тот же исполняемый файл и работают правильно; безотказно.
Любая помощь будет оценена.
ОБНОВЛЕНО 08/08/2014
ПРИМЕЧАНИЯ. (1) Меня не интересует раскрытие имени пользователя или пароля, поскольку они являются временными, и это на одной из моих локальных машин. (2) Вы увидите, что я использую файл phar в этом сеансе отладки. То же самое происходит с использованием «установленной» версии «wp» в папке bin.
Вот сеанс отладки в PHPStorm, в котором я начал с этой командой 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_
Точки останова в utils.php были установлены для строки 331:
$final_cmd = $cmd . assoc_args_to_str( $assoc_args );
который создает последнюю команду, переданную в строку 333 для выполнения:
$proc = proc_open( $final_cmd, $descriptors, $pipes );
Вот изображение отладки со статусом переменных непосредственно перед обработкой строк 334-339 для выхода из wp-cli и выдачи сообщения об ошибке в командной строке 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
$
Я знаю, что wp-cli - это хорошо сконструированное программное обеспечение, поэтому, скорее всего, я что-то упустил по пути. (Совместная работа командной строки и PHPStorm заняла много времени, так как это новый инструмент для меня.) Я буду придерживаться этого, как только позволит время, но если у кого-то есть какие-то подсказки, это поможет.
ОБНОВЛЕНИЕ: 29.03.14
Спасибо за тикет и объединение scribu, но, к сожалению, это не решает проблему. Я получаю ту же ошибку.
Сначала я был сбит с толку после повторной загрузки файла phar, потому что я нашел тот же код, что и до вашего билета и слияния. Момент WTF. Поэтому я просмотрел каталог builds на GitHub и увидел, что файл датирован за 2 дня до вашего слияния, поэтому он не включил бы изменения.
Я взял ночной пакет, перезагрузил проект, и с помощью putenv () произошли изменения, но Bash выдает ту же ошибку, что и раньше.
Кажется, с тех пор, как это изменение wp-cli было несовместимо с Cygwin.
ОБНОВЛЕНИЕ: 19.04.2014
Версия 0.15.0 была выпущена 4/15, поэтому я установил ее и выполнил все приведенные выше команды. wp-cli работал так же, как и в версиях <0.14.1. Я сравнил 0,14,1 с 0,15,0 и обнаружил следующее.
Строки 326-339 из v0.14.1 гласят:
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 );
Строки 326-342 в v0.15.0 теперь читаются:
$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 );
Это исправило проблему. Теперь wp-cli снова работает с Cygwin, по крайней мере, с командами, которые я здесь использовал, а также с некоторыми другими, которые основывались на прохождении этого пункта - установкой.