Вопрос или проблема
Я следую 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
в двух местах…
-
В моем файле wp-config.php
- Я сделал это после того, как получил эту же ошибку, когда запускал
install-wp-tests.sh
- Я сделал это после того, как получил эту же ошибку, когда запускал
-
В команде
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 не может подключиться к серверу базы данных. Причины могут быть различными:
- Неверные учетные данные для подключения (имя пользователя или пароль).
- Неверный хост базы данных (например,
localhost
). - Сервер базы данных не работает или неправильно настроен.
Решение
Основная причина проблемы, как показывают ваши действия и комментарии, связана с использованием localhost
в качестве имени хоста. В окружениях MacOS, особенно когда используется MAMP или другие локальные блоки серверов, подключение к базе данных через localhost
иногда может приводить к ошибкам.
Шаги по устранению проблемы:
-
Изменение хоста базы данных:
Как вы правильно заметили, поменятьlocalhost
на127.0.0.1
исправляет проблему. Это связано с тем, чтоlocalhost
может попытаться использовать сокет Unix для соединения, который не всегда доступен, в то время как127.0.0.1
всегда вызывает соединение по TCP/IP. Это решение было также подтверждено другими пользователями. -
Обновление 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');
-
Запуск 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
-
Проверка работы MySQL:
Убедитесь, что сервер базы данных MySQL действительно работает на вашей машине. Вы можете использовать командуmysqladmin
для подтверждения:mysqladmin -u root -p version
-
Проверка разрешений:
Проверьте, что у пользователяroot
есть необходимые права доступа к базе данныхwordpress_test_1
. -
Логи и дополнительные проверки:
В случае, если ошибка все еще возникает, посмотрите в логи MySQL и PHP для дополнительной информации. Также вы можете протестировать подключение к базе данных с помощью простого PHP-скрипта вне контекста WordPress.
Заключение
Ошибка «Ошибка установления соединения с базой данных» часто связана с вопросами конфигурации сервера базы данных. В вашем случае смена хоста базы данных на 127.0.0.1
и обновление файлов конфигурации с учетом правильных учетных данных и хоста помогут устранить проблему. Следуя этим шагам, вы должны быть в состоянии успешно запустить тесты вашего плагина с помощью PHPUnit.