2

我使用 Laravel Sail 作为我的开发环境。根据文档

当 MySQL 容器启动时,它将确保存在名称与 DB_DATABASE 环境变量的值匹配的数据库。

这非常适合我的开发环境,但在测试方面并没有那么多,因为我.env.testing定义了一个单独的数据库,而且似乎没有创建这个数据库 - 当我sail mysql进入容器并运行show databases;它时没有列出。因此,sail test在涉及数据库的每个测试中,运行都会失败。

SQLSTATE[HY000] [1045] Access denied for user ...

我的.env文件包含以下内容:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=dev

我的.env.testing文件包含以下内容:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test

DB_USERNAME并且DB_PASSWORD在两个文件中都相同。

如何创建此数据库以使其在运行时可用sail test

编辑:

当我挖掘存储库代码时,我发现在mysql构建容器映像时正在创建数据库,但看起来并没有创建多个数据库的选项

MYSQL_DATABASE 此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于 GRANT ALL)。

4

2 回答 2

5

将以下内容添加到密钥docker-compose.ymlservices:并将您的主机设置.env.testingmysql_test

  mysql_test:
    image: "mysql:8.0"
    environment:
      MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
      MYSQL_DATABASE: "${DB_DATABASE}"
      MYSQL_USER: "${DB_USERNAME}"
      MYSQL_PASSWORD: "${DB_PASSWORD}"
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
    networks:
      - sail
于 2021-01-11T21:38:47.287 回答
0

您应该能够在现有 mysql 容器上test与原始数据库一起创建数据库:dev

sail mysql

mysql> CREATE DATABASE test;

我没有使用 mysql 对此进行测试,但同样的过程适用于 postgres:

sail psql

dev=# CREATE DATABASE test;
于 2021-06-23T01:37:09.833 回答