【问题标题】:wp-cli: unable to run phpunit on MAMPwp-cli:无法在 MAMP 上运行 phpunit
【发布时间】:2015-08-11 13:07:57
【问题描述】:

我正在关注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 博客文章底部的 cmets 后,我看到安装脚本引用了 mysqladmin 的 OSX 版本。我不确定这是否重要,但我在路径中添加了 MAMP 版本,并重新运行了安装脚本。无论如何,似乎在/tmp/ 中安装了Wordpress 文件。运行phpunit时出现同样的错误

【问题讨论】:

  • 默认情况下,mamp runs mysql on port 8889。你改了吗? telnet localhost 3306 的输出是什么?
  • @Ploutox 我确实改变了它,所以 MAMP 在标准端口上运行 mysql。我在上面的问题中添加了telnet 的输出。
  • 是的,使用哪个mysql 很重要。您是否尝试按照此处所述导出 MAMP 的 mysqlmysqladminstackoverflow.com/a/29990624/2646526
  • 请检查 mysql 是否通过终端运行:ps aux | grep sql。此外,使用此命令,您可以检查在哪个端口上运行的内容:lsof -i -P | grep -i "listen"。如果 mysql 在正确的端口上运行,您是否有防火墙妨碍您?其他选项,在终端运行mysql -uroot -p命令可以连接mysql吗?
  • 你能去localhost:3306看看是否下载了一个名为'download'的文件吗?否则你的 mysql 没有在那个端口上运行(或者根本没有运行)。

标签: bash wordpress mamp wp-cli


【解决方案1】:

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

更新 1

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

<?php phpinfo() ?>

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

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

【讨论】:

  • 收音机能否设置为“仅来自本机”?
  • 如果您需要能够在本地连接到 MySQL 选择only from this Mac,否则选择from other computers
  • 所以我可以运行 wp db tables 并且它可以工作。但是当我运行phpunit 时,它会返回“无法连接到数据库”屏幕...
  • Wordpress 能用吗?它是否连接到 MySQL 数据库?
  • 我想是的。刚刚在上面添加了Update 2,详细说明了
【解决方案2】:

我终于让phpunit 运行了!!

我在任何地方都找不到此文档...

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

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

+400 给@Nikita Zernov 的帮助!

【讨论】:

    【解决方案3】:

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

    此外,如果您想进行远程登录,请尝试通过访问启用远程登录 System Preferences -&gt; Sharing -&gt; 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

    希望对你有帮助。

    【讨论】:

    • MAMP 似乎拥有它自己的神奇版本的该属性。在 my.cnf 我看到MAMP_skip-networking_MAMP。你觉得我应该评论一下吗?你的理论是什么?
    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2015-05-07
    • 2012-02-29
    • 2013-09-01
    • 1970-01-01
    • 2012-08-19
    • 2017-11-18
    • 2016-11-29
    相关资源
    最近更新 更多