Ошибка установки соединения с базой данных при запуске phpunit

Вопрос или проблема

Я следую https://make.wordpress.org/cli/handbook/plugin-unit-tests/, чтобы запустить модульные тесты для плагинов.

Я создаю новый плагин.

$ wp scaffold plugin hello-plugin-1
Успех: Созданы файлы плагина.
Успех: Созданы файлы тестов.

Запустите install-wp-tests.sh.

$ cd wp-content/plugins/hello-plugin-1
$ ./bin/install-wp-tests.sh wordpress_test_1 root root localhost latest
+ install_wp
+ '[' -d /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/ ']'
+ return
+ install_test_suite
++ uname -s
+ [[ Darwin == \D\a\r\w\i\n ]]
+ local ioption=-i.bak
+ '[' '!' -d /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib ']'
+ '[' '!' -f wp-tests-config.php ']'
+ download https://develop.svn.wordpress.org/tags/5.4/wp-tests-config-sample.php /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
++ which curl
+ '[' /usr/bin/curl ']'
+ curl -s https://develop.svn.wordpress.org/tags/5.4/wp-tests-config-sample.php
++ echo /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/
++ sed 's:/\+$::'
+ WP_CORE_DIR=/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/
+ sed -i.bak 's:dirname( __FILE__ ) . '\''/src/'\'':'\''/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress//'\'':' /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
+ sed -i.bak s/youremptytestdbnamehere/wordpress_test_1/ /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
+ sed -i.bak s/yourusernamehere/root/ /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
+ sed -i.bak s/yourpasswordhere/root/ /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
+ sed -i.bak 's|localhost|localhost|' /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php
+ install_db
+ '[' false = true ']'
+ PARTS=(${DB_HOST//\:/ })
+ local PARTS
+ local DB_HOSTNAME=localhost
+ local DB_SOCK_OR_PORT=
+ local EXTRA=
+ '[' -z localhost ']'
++ echo
++ grep -e '^[0-9]\{1,\}$'
+ '[' ']'
+ '[' -z ']'
+ '[' -z localhost ']'
+ EXTRA=' --host=localhost --protocol=tcp'
+ mysqladmin create wordpress_test_1 --user=root --password=root --host=localhost --protocol=tcp
mysqladmin: [Warning] Использование пароля в интерфейсе командной строки может быть небезопасным.

Запустите phpunit и получили эту ошибку подключения к базе данных.

$ phpunit
PHP Warning:  mysqli_real_connect(): (HY000/2002): Нет такого файла или директории в /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/wp-includes/wp-db.php на строке 1626
PHP Stack trace:
PHP   1. {main}() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/includes/install.php:0
PHP   2. require_once() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/includes/install.php:29
PHP   3. require_wp_db() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/wp-settings.php:126
PHP   4. wpdb->__construct() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/wp-includes/load.php:426
PHP   5. wpdb->db_connect() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/wp-includes/wp-db.php:631
PHP   6. mysqli_real_connect() /private/var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress/wp-includes/wp-db.php:1626

wp_die вызван
Сообщение : <p><code>Нет такого файла или директории</code></p>
<h1>Ошибка при установлении соединения с базой данных</h1>
<p>Это либо означает, что информация о имени пользователя и пароле в вашем <code>wp-config.php</code> файле неверна, либо мы не можем связаться с сервером базы данных по адресу <code>localhost</code>. Это может означать, что сервер базы данных вашего хостинга недоступен.</p>
<ul>
<li>Вы уверены, что у вас правильное имя пользователя и пароль?</li>
<li>Вы уверены, что вы правильно ввели имя хоста?</li>
<li>Вы уверены, что сервер базы данных работает?</li>
</ul>
<p>Если вы не уверены, что означают эти термины, вам, вероятно, следует связаться с вашим хостингом. Если вам все еще нужна помощь, вы всегда можете посетить <a href="https://wordpress.org/support/forums/">Форумы поддержки WordPress</a>.</p>

Заголовок : 

Нужно ли нам настраивать базу данных в wp-config.php в /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress перед запуском phpunit? Я пробовал это, и это не сработало. Есть идеи, что пошло не так?

Я использую WP-CLI 2.4.0 и PHPUnit 7.5.9.

Я исправил проблему, изменив localhost на 127.0.0.1 в /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress-tests-lib/wp-tests-config.php.

Я столкнулся с такой же проблемой. Чтобы это работало на моем локальном компьютере, который работает под MacOS с MAMP Pro, мне нужно было изменить хост базы данных с localhost на 127.0.0.1 в двух местах…

  1. В моем файле wp-config.php

    • Я сделал это после того, как получил эту же ошибку, когда запускал install-wp-tests.sh
  2. В команде install-wp-tests.sh

    • Это решило ошибку, которую вы упомянули после запуска phpunit
    • Пример: ./bin/install-wp-tests.sh wordpress_test_1 root root 127.0.0.1 latest

Ответ или решение

Ошибка установления соединения с базой данных при запуске PHPUnit является распространенной проблемой, особенно при разработке плагинов для WordPress. Ваша ситуация, описанная в вопросе, имеет несколько значительных аспектов, требующих детального анализа.

Проблема

На этапе запуска тестов с помощью PHPUnit, вы столкнулись с сообщением об ошибке:

PHP Warning:  mysqli_real_connect(): (HY000/2002): No such file or directory in /private/var/folders/.../wp-includes/wp-db.php on line 1626

Это сообщение указывает на то, что PHP не может подключиться к серверу базы данных. Причины могут быть различными:

  1. Неверные учетные данные для подключения (имя пользователя или пароль).
  2. Неверный хост базы данных (например, localhost).
  3. Сервер базы данных не работает или неправильно настроен.

Решение

Основная причина проблемы, как показывают ваши действия и комментарии, связана с использованием localhost в качестве имени хоста. В окружениях MacOS, особенно когда используется MAMP или другие локальные блоки серверов, подключение к базе данных через localhost иногда может приводить к ошибкам.

Шаги по устранению проблемы:

  1. Изменение хоста базы данных:
    Как вы правильно заметили, поменять localhost на 127.0.0.1 исправляет проблему. Это связано с тем, что localhost может попытаться использовать сокет Unix для соединения, который не всегда доступен, в то время как 127.0.0.1 всегда вызывает соединение по TCP/IP. Это решение было также подтверждено другими пользователями.

  2. Обновление wp-config.php:
    Убедитесь, что в вашем файле wp-config.php, который находится в /var/folders/qd/y3hp2mb90gx36d5swtxcndhh0000gn/T/wordpress, вы указали правильные данные для подключения к базе данных:

    define('DB_NAME', 'wordpress_test_1');
    define('DB_USER', 'root');
    define('DB_PASSWORD', 'root');
    define('DB_HOST', '127.0.0.1');
  3. Запуск install-wp-tests.sh:
    При запуске скрипта install-wp-tests.sh, убедитесь, что вы заменили localhost на 127.0.0.1. Например, выполните команду:

    ./bin/install-wp-tests.sh wordpress_test_1 root root 127.0.0.1 latest
  4. Проверка работы MySQL:
    Убедитесь, что сервер базы данных MySQL действительно работает на вашей машине. Вы можете использовать команду mysqladmin для подтверждения:

    mysqladmin -u root -p version
  5. Проверка разрешений:
    Проверьте, что у пользователя root есть необходимые права доступа к базе данных wordpress_test_1.

  6. Логи и дополнительные проверки:
    В случае, если ошибка все еще возникает, посмотрите в логи MySQL и PHP для дополнительной информации. Также вы можете протестировать подключение к базе данных с помощью простого PHP-скрипта вне контекста WordPress.

Заключение

Ошибка «Ошибка установления соединения с базой данных» часто связана с вопросами конфигурации сервера базы данных. В вашем случае смена хоста базы данных на 127.0.0.1 и обновление файлов конфигурации с учетом правильных учетных данных и хоста помогут устранить проблему. Следуя этим шагам, вы должны быть в состоянии успешно запустить тесты вашего плагина с помощью PHPUnit.

Оцените материал
Добавить комментарий

Капча загружается...