Wp-cli: невозможно запустить phpunit на MAMP
Я следую инструкциям инструкции по установке/установке плагина. Я получил 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 (который работает). Я не уверен, что это актуально для установки script, так как я думаю, что он создает временную БД для запуска тестов... Имеет ли значение, использует ли она встроенный 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 не был установлен... почему я не мог подключиться! Но теперь это так. Я запустил установку script, и это работает...
$ ./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 работать полностью на native (cli) PHP/Mysql, или MAMP PHP/Mysql, или некоторая комбинация обоих.
Обновление 4
Я уверен, что конечная проблема заключается в том, что phpunit необходимо установить в MAMP, но я запускаю его из OSX...
$which phpunit
/usr/bin/phpunit
Упомянуто в этот смысл.
Обновить 6
Оказывается, вы больше не можете устанавливать 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
После прочтения комментариев в нижней части этого сообщения в блоге, я вижу, что установка script ссылалась на версию OSX mysqladmin
. Я не уверен, если это имеет значение, но я добавил версию MAMPs в путь и перезапустил установку script. Кажется, все равно установить файлы Wordpress в /tmp/
. Такая же ошибка при запуске phpunit
Ответы
Ответ 1
Наконец-то я получил phpunit
для запуска!
Я не мог найти эту документацию где-нибудь...
В какой-то момент процесса установки файлы ядра Wordpress устанавливаются в /tmp/wordpress/
. У этой установки Wordpress есть собственный wp-config.php
файл с неверными значениями. Когда я исправил эти значения в соответствии с wp-config.php
моего сайта, phpunit
работал без проблем!
Я не уверен, как это произошло, но моя теория заключается в том, что в первый раз я запустил установку script с неправильными учетными данными. Но позже я их исправил (я несколько раз запускал установку script). Но я думаю, что установка script не перезаписывала исходные файлы.
+400 to @Nikita Zernov за такую помощь!
Ответ 2
Если вы используете MAMP, проблема может иметь отношение к вашим настройкам MySQL Server. Обязательно проверьте параметр Allow network access
в настройках MAMP:
![введите описание изображения здесь]()
Обновление 1
Создайте файл phpinfo.php
в корневом каталоге (обычно /Applications/MAMP/htdocs
для MAMP). Вставьте следующий контент:
<?php phpinfo() ?>
Затем проверьте свойство Loaded Configuration File
. Откройте его с помощью nano
или другого текстового редактора в терминале. Затем найдите и измените эти 3 свойства pdo_mysql.default_socket
, mysql.default_socket
, mysqli.default_socket
в файл сокета.
Ссылка на http://maccrazy.com/lion-upgrade-killed-my-php-site-and-how-i-fixed-it
Ответ 3
Обычно, если вы используете 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
В режиме skip-network экземпляр mysql вообще не "прослушивает соединения TCP/IP. Все взаимодействие с mysqld должно выполняться с использованием именованных каналов или разделяемой памяти (в Windows) или файлов сокетов Unix (в Unix)" из MySql Docs
Надеюсь, это поможет.