Проблема с подключением к БД в тестах
Добавлено: 2021.02.24, 00:01
Всем привет! Смотр сейчас видео Дмитрия Елисеева по rest api. Возникла проблема.
У Дмитрия в уроке окружение локальное, у меня на докере.
В докере есть два сервиса для баз данных, mariadb и mariadb-test.
В common/main-local
В common/test-local
При этом, когда запускаю тесты, фикстуры не могут накатиться, пишет
При запуске ./yii_test migrate/up миграции накатываются. То есть все таки до базы можно достучаться, а в тестах нет.
Методом тыка дошел до такого решения - в common/test-local меняю в dsn host с mariadb-test (как он называется в докере) на 127.0.0.1 и порт соответсвенно не внутренний (3306) а прокинутый из докера наружу 33307, тогда при запуске тестов базу видно.
Дальше решил проверить миграции. Выполняю ./yii_test migrate/up и пишет conection refused.
То есть чтобы запускать тесты в настройках нужно писать 127.0.0.1 и внешний (прокинутый из docker) порт, а чтобы выполнять миграции нужно писать хост из докера mariadb-test и внутренний (в сети докера) порт 3306.
В чем разница?
У Дмитрия в уроке окружение локальное, у меня на докере.
В докере есть два сервиса для баз данных, mariadb и mariadb-test.
В common/main-local
Код: Выделить всё
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=mariadb;port=3306;dbname=advance_events',
'username' => 'advance_events',
'password' => 'advance_events_password',
'charset' => 'utf8',
'enableSchemaCache' => false,
'on afterOpen' => function (yii\base\Event $event) {
/* @var $db \yii\db\Connection */
$db = $event->sender;
$db->createCommand('SET time_zone = :timeZone;', ['timeZone' => date('P')])->execute();
}
],
Код: Выделить всё
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=mariadb-test;port=33307;dbname=advance_events_test',
'username' => 'advance_events_test',
'password' => 'advance_events_password_test',
'charset' => 'utf8',
'enableSchemaCache' => false,
'on afterOpen' => function (yii\base\Event $event) {
/* @var $db \yii\db\Connection */
$db = $event->sender;
$db->createCommand('SET time_zone = :timeZone;', ['timeZone' => date('P')])->execute();
}
],
Код: Выделить всё
[yii\db\Exception] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known
Методом тыка дошел до такого решения - в common/test-local меняю в dsn host с mariadb-test (как он называется в докере) на 127.0.0.1 и порт соответсвенно не внутренний (3306) а прокинутый из докера наружу 33307, тогда при запуске тестов базу видно.
Дальше решил проверить миграции. Выполняю ./yii_test migrate/up и пишет conection refused.
То есть чтобы запускать тесты в настройках нужно писать 127.0.0.1 и внешний (прокинутый из docker) порт, а чтобы выполнять миграции нужно писать хост из докера mariadb-test и внутренний (в сети докера) порт 3306.
В чем разница?