wp-cli 0.14.1 MySQL error

时间:2014-02-28 作者:user1640896

我今天刚刚更新到wp cli 0.14.1,再次遇到MySQL问题。我在Windows、Wampserver和Cygwin上。

当我第一次更新到最新版本(0.14.0)时,我也遇到了类似的问题,最终找到并使用了github discussion 这很可能是由于php中的“variables\\u order”。ini。我在ini文件中对此进行了注释,以强制默认使用EGPC而不是GPCS。这就解决了问题。在下一版本中提到了修复此问题。

现在我已经更新到0.14.1,并且在尝试运行“wp core config…”时创建wp配置。php文件我收到命令行错误

MYSQL_PWD is not recognized as an internal or external command.
我回到github线程,看到scribu确实进行了讨论中的更改。我跟着link to it 看看它是否能提供一些线索。我在第328行看到了变化,但不知道我现在应该尝试什么,因为这种变化似乎是造成我问题的原因。

仅供参考:我在DOS或Cygwin命令行中使用mysql没有问题,它们都引用相同的可执行文件,并且工作正常;完美无瑕。

任何帮助都将不胜感激。

2014年8月3日更新

注意:(1)我不想公开用户名或密码,因为它们是临时的,这是在我的一台本地计算机上。(2) 您将看到我在这个调试会话中使用的是phar文件。使用bin文件夹中的“installed”版本“wp”也会发生同样的情况。

下面是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_
UTIL中的断点。为第331行设置了php:

$final_cmd = $cmd . assoc_args_to_str( $assoc_args );
这将创建交给第333行执行的最终命令:

$proc = proc_open( $final_cmd, $descriptors, $pipes );
这是debugging image 在处理第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协同工作非常耗时,因为这对我来说是一个新工具。)如果时间允许的话,我会坚持下去,但如果有人有任何线索,这会有所帮助。

更新日期:2014年3月29日

谢谢你的票和合并scribu,但不幸的是,它并没有解决问题。我也犯了同样的错误。

起初,我在重新下载phar文件后感到困惑,因为我找到了与您的ticket和merge之前完全相同的代码。WTF时刻。因此,我查看了GitHub上的builds目录,发现该文件的日期是合并前2天,因此它不会包含更改。

我抓取了晚上的文件,重新加载了项目,putenv()有了变化,但Bash抛出了与之前相同的错误。

似乎从那以后this change wp cli与Cygwin不兼容。

更新日期:2014年4月19日

版本0.15.0于2015年4月发布,所以我安装了它并运行了上面的所有命令。wp cli与版本中的一样工作<;0.14.1。我将0.14.1与0.15.0进行了比较,得出以下结论。

v0的326-339线。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 );
v0中的管线326-342。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,至少是我在这里使用的命令,还有一些依赖于通过这一点的命令-安装。

1 个回复
SO网友:scribu

Cygwin似乎不像Bash那样支持内联环境变量。

打开票证:https://github.com/wp-cli/wp-cli/issues/1086

结束

相关推荐

如何在wp-cli中正确使用命令‘wp post create’?

我需要用这个命令创建一篇带有标题、内容和摘录的文章,正如实用工具文档中所描述的那样。你能给我举一个如何使用它的例子吗?我在谷歌的官方文档中也找不到。谢谢