wp-cli: no se puede ejecutar phpunit en MAMP

7 minutos de lectura

avatar de usuario
emersonthis

estoy siguiendo el instrucciones de instalación/configuración de la prueba del complemento. Obtuve wp scaffold plugin-tests my-plugin correr. Pero luego, en el siguiente paso cuando trato de ejecutar bash bin/install-wp-tests.sh wordpress_test root '' localhost latest Obtuve el siguiente error:

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'

Mi sitio local de WordPress se ejecuta con MAMP (que funciona). No estoy seguro de si eso es relevante para el script de instalación, ya que creo que está creando una base de datos temporal para ejecutar las pruebas… ¿Importa si usa OSX mysql incorporado o MySQL de MAMP?

Aquí está la salida de 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

Actualización 2
Descubrí que originalmente MySQL no estaba instalado… ¡por eso no podía conectarme! Pero ahora lo es. Ejecuté el script de instalación, y esto funciona…

$ ./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

Pero cuando corro phpunit Entiendo esto:

$ 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

Parte de mi problema es que no tengo claro si wp-cli debería ejecutarse completamente en PHP/Mysql nativo (cli), o PHP/Mysql de MAMP, o alguna combinación de ambos.

Actualización 4
Estoy bastante seguro de que el problema final es que phpunit debe instalarse en MAMP, pero lo estoy ejecutando desde OSX…

$which phpunit
/usr/bin/phpunit

Mencionado en esta esencia.

Actualización 6

Resulta que ya no puedes instalar phpunit usando pera. Así que lo agregué como una dependencia del compositor en require-dev, pero cuando ejecuto esa versión, aparece el mismo error.

$ ./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

Incluso lo agregué a mi camino para estar seguro…

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

Actualización 7

Después de leer los comentarios en la parte inferior de este publicación de blog, veo que el script de instalación hacía referencia a la versión OSX de mysqladmin. No estoy seguro de si esto importa, pero antepuse la versión de MAMP en la ruta y volví a ejecutar el script de instalación. Parece instalar los archivos de WordPress en /tmp/ de todos modos. Mismo error cuando ejecuto phpunit

  • Por defecto, mamp ejecuta mysql en el puerto 8889. ¿Lo has cambiado? ¿Cuál es la salida de telnet localhost 3306 ?

    – Aserre

    11 de agosto de 2015 a las 13:34

  • @Ploutox Lo cambié para que MAMP ejecute mysql en el puerto estándar. Agregué la salida de telnet a la pregunta anterior.

    – emersonthis

    11 de agosto de 2015 a las 14:25

  • si importa cual mysql esta siendo usado. ¿Intentaste exportar MAMP’s? mysql y mysqladmin como se describe aquí? stackoverflow.com/a/29990624/2646526

    – heenenee

    16 de agosto de 2015 a las 15:29

  • Por favor, compruebe si mysql se ejecuta a través de la Terminal: ps aux | grep sql. Además, con este comando puede verificar qué se ejecuta en qué puerto: lsof -i -P | grep -i "listen". Si mysql se está ejecutando en el puerto correcto, ¿tiene quizás un firewall que se interpone en su camino? Otra opción, ¿puedes conectarte a mysql si ejecutas el comando? mysql -uroot -p en la terminal?

    – Jerik

    16/08/2015 a las 20:03


  • ¿Podrías ir a servidor local: 3306 y ver si se descarga un archivo llamado ‘descargar’? De lo contrario, su mysql no se ejecuta en ese puerto (o no se ejecuta en absoluto).

    – GuyT

    18 de agosto de 2015 a las 11:15

avatar de usuario
Nikita Zernov

Si está utilizando MAMP, el problema puede ser relevante para la configuración de su servidor MySQL. Asegúrate de revisar Allow network access opción en la configuración de MAMP:

ingrese la descripción de la imagen aquí

Actualización 1

Crear phpinfo.php archivo en su directorio raíz (generalmente /Applications/MAMP/htdocs para MAMP). Pegue el siguiente contenido:

<?php phpinfo() ?>

Luego revisa el Loaded Configuration File propiedad. Ábrelo usando nano u otro editor de texto en la terminal. Luego encuentra y cambia estas 3 propiedades.pdo_mysql.default_socket, mysql.default_socket, mysqli.default_socket a su archivo de socket.

referenciado desde http://maccrazy.com/lion-upgrade-killed-my-php-site-and-how-i-arreglado

  • ¿Se puede configurar la radio en “Solo desde esta Mac”?

    – emersonthis

    20 de agosto de 2015 a las 19:19

  • Si necesita poder conectarse a MySQL localmente, elija only from this Macde lo contrario from other computers

    – Nikita Zernov

    20 ago 2015 a las 19:20

  • para que pueda correr wp db tables y funciona. Pero cuando corro phpunit devuelve la pantalla “No se puede conectar a la base de datos”…

    – emersonthis

    20 de agosto de 2015 a las 19:24

  • ¿Wordpress funciona? ¿Se conecta a la base de datos MySQL?

    – Nikita Zernov

    20 de agosto de 2015 a las 19:27

  • Creo que sí. Recien agregado Actualización 2 anterior, que elabora

    – emersonthis

    20 de agosto de 2015 a las 19:28


finalmente lo conseguí phpunit ¡¡correr!!

No pude encontrar esto documentado en cualquier sitio

En algún momento durante el proceso de instalación, los archivos principales de WordPress se instalan en /tmp/wordpress/. Que La instalación de WordPress tiene su propio wp-config.php archivo que tenía valores incorrectos. Cuando corregí esos valores para que coincidieran con los wp-config.php de mi sitio, phpunit funcionó sin problemas!

No estoy seguro de cómo sucedió esto, pero mi teoría es que la primera vez que ejecuté el script de instalación con las credenciales incorrectas. Pero luego los corregí (volví a ejecutar el script de instalación varias veces). Pero creo que el script de instalación no sobrescribió los archivos originales.

¡+400 a @Nikita Zernov por tanta ayuda!

Normalmente, si usa ftp o telnet para localhost, obtendrá conection refusedsi desea corregir el error, cambie su httpd.conf a ServerName localhost

Además, si desea realizar un inicio de sesión remoto, intente habilitar el inicio de sesión remoto yendo a
System Preferences -> Sharing -> Remote Login box (check it).

Para el problema de MySQL

Asegúrese de que ‘skip-networking’ esté comentado en el archivo de configuración (en este caso /opt/local/etc/mysql55/my.conf) o al iniciar el servidor mysql, no comienza con ‘–skip-networking’

En el modo de omisión de redes, la instancia de mysql no “escucha las conexiones TCP/IP en absoluto. Toda interacción con mysqld debe realizarse utilizando canalizaciones con nombre o memoria compartida (en Windows) o archivos de socket Unix (en Unix)” de MySql Docs

Espero que ayude

  • MAMP parece tener su propia versión mágica de esa propiedad. En my.cnf veo MAMP_skip-networking_MAMP. ¿Crees que debería comentar esto? ¿Cuál es tu teoría?

    – emersonthis

    21 de agosto de 2015 a las 12:46

¿Ha sido útil esta solución?