wp-cli:无法在MAMP上运行phpunit

时间:2015-08-11 13:07:58

标签: bash wordpress-plugin mamp wordpress wp-cli

我跟随plugin test setup/install instructions。我让wp scaffold plugin-tests my-plugin跑了。但是当我尝试运行bash bin/install-wp-tests.sh wordpress_test root '' localhost latest时,下一步我收到以下错误:

mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to MySQL server on 'localhost' (61)'
Check that mysqld is running on localhost and that the port is 3306.
You can check this by doing 'telnet localhost 3306'

我的本​​地Wordpress网站正在运行MAMP(正在运行)。我不确定这是否与安装脚本相关,因为我认为它创建了一个临时数据库来运行测试......如果它使用内置的OSX mysql或者它是否重要MAMP的MySQL?

这是wp --info

的输出
$ ./vendor/wp-cli/wp-cli/bin/wp --info
PHP binary: /Applications/MAMP/bin/php/php5.6.10/bin/php
PHP version:    5.6.10
php.ini used:   /Applications/MAMP/bin/php/php5.6.10/conf/php.ini
WP-CLI root dir:    /Applications/MAMP/htdocs/pipeline/wp-content/plugins/wp-github-pipeline/vendor/wp-cli/wp-cli
WP-CLI global config:   
WP-CLI project config:  
WP-CLI version: 0.19.2

更新2 我发现最初没有安装MySQL ......这就是我无法连接的原因!但现在是。我运行了安装脚本,这有效...

$ ./vendor/wp-cli/wp-cli/bin/wp db tables
wp_users
wp_usermeta
wp_posts
wp_comments
wp_links
wp_options
wp_postmeta
wp_terms
wp_term_taxonomy
wp_term_relationships
wp_commentmeta

但是当我跑phpunit时,我得到了这个:

$ phpunit
PHP Warning:  mysqli_real_connect(): (HY000/2002): No such file or directory in /private/tmp/wordpress/wp-includes/wp-db.php on line 1452
PHP Stack trace:
PHP   1. {main}() /private/tmp/wordpress-tests-lib/includes/install.php:0
PHP   2. require_once() /private/tmp/wordpress-tests-lib/includes/install.php:21
PHP   3. require_wp_db() /private/tmp/wordpress/wp-settings.php:79
PHP   4. wpdb->__construct() /private/tmp/wordpress/wp-includes/load.php:350
PHP   5. wpdb->db_connect() /private/tmp/wordpress/wp-includes/wp-db.php:649
PHP   6. mysqli_real_connect() /private/tmp/wordpress/wp-includes/wp-db.php:1452

Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /private/tmp/wordpress/wp-includes/wp-db.php on line 1452

我的部分问题是,我不清楚wp-cli是否应该完全在本机(cli)PHP / Mysql或MAMP的PHP / Mysql上运行,或两者的某种组合。

更新4 我很确定最后的问题是phpunit需要安装在MAMP中,但我是从OSX运行它...

$which phpunit
/usr/bin/phpunit

this gist中提及。

更新6

事实证明你不能再使用pear安装phpunit了。所以我在require-dev下将它添加为作曲家依赖,但是当我运行该版本时,我得到了同样的错误!

$ ./vendor/phpunit/phpunit/phpunit
PHP Warning:  mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /private/tmp/wordpress/wp-includes/wp-db.php on line 1452
PHP Stack trace:
PHP   1. {main}() /private/tmp/wordpress-tests-lib/includes/install.php:0
PHP   2. require_once() /private/tmp/wordpress-tests-lib/includes/install.php:21
PHP   3. require_wp_db() /private/tmp/wordpress/wp-settings.php:79
PHP   4. wpdb->__construct() /private/tmp/wordpress/wp-includes/load.php:350
PHP   5. wpdb->db_connect() /private/tmp/wordpress/wp-includes/wp-db.php:649
PHP   6. mysqli_real_connect() /private/tmp/wordpress/wp-includes/wp-db.php:1452

Warning: mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /private/tmp/wordpress/wp-includes/wp-db.php on line 1452

我甚至将它添加到我的路径中以确保......

$ which phpunit
/Applications/MAMP/htdocs/pipeline/wp-content/plugins/wp-github-pipeline/vendor/phpunit/phpunit/phpunit

更新7

阅读this博客文章底部的评论后,我看到安装脚本引用了mysqladmin的OSX版本。我不确定这是否重要,但我在路径中添加了MAMP版本,并重新运行安装脚本。似乎无论如何都要在/tmp/中安装Wordpress文件。运行phpunit

时出现相同的错误

3 个答案:

答案 0 :(得分:3)

如果您使用的是MAMP,则问题可能与您的MySQL服务器设置有关。务必检查MAMP设置中的Allow network access选项:

enter image description here

更新1

在根目录中创建phpinfo.php文件(对于MAMP,通常为/Applications/MAMP/htdocs)。粘贴以下内容:

<?php phpinfo() ?>

然后检查Loaded Configuration File属性。使用终端中的nano或其他文本编辑器打开它。然后查找并将此3个属性pdo_mysql.default_socketmysql.default_socketmysqli.default_socket更改为套接字文件。

引自http://maccrazy.com/lion-upgrade-killed-my-php-site-and-how-i-fixed-it

答案 1 :(得分:1)

我终于让phpunit跑了!!

我无法在任何地方找到 ...

在安装过程中的某个时刻,Wordpress核心文件安装在/tmp/wordpress/中。 那个 Wordpress安装有自己的wp-config.php文件,其值不正确。当我更正这些值以匹配我网站的wp-config.php时,phpunit没有问题!

我不确定这是怎么发生的,但我的理论是我第一次使用错误的凭据运行安装脚本。但后来我纠正了它们(我重新运行了几次安装脚本)。但我认为安装脚本没有覆盖原始文件。

+ @到@Nikita Zernov这么多的帮助!

答案 2 :(得分:0)

通常,如果您ftp或telnet到localhost,您将获得conection refused,如果您想修复错误,请将httpd.conf更改为ServerName localhost

此外,如果您想要进行远程登录,请尝试启用远程登录 System Preferences -> Sharing -> Remote Login box (check it)

对于MySQL问题

确保在配置文件中注释掉'skip-networking'(在本例中为/opt/local/etc/mysql55/my.conf)或启动mysql服务器时,它不是以'-skip-networking'开头的

在跳过网络模式下,mysql实例根本不“侦听TCP / IP连接”。所有与mysqld的交互必须使用命名管道或共享内存(在Windows上)或Unix套接字文件(在Unix上)“from MySql Docs

我希望它有所帮助。