在 laravel 应用程序中添加读写数据库时的 Gitlab 问题

Gitlab issue when add read and write database in laravel application

我在当前laravel应用中添加一个读写数据库连接,像这样:

'mysql' => [
'read' => [
    'host' => [
        env('DB_HOST_READONLY', '127.0.0.1'),
    ],
],
'write' => [
    'host' => [
        env('DB_HOST', '127.0.0.1'),
    ],
],
'sticky' => true,
'driver' => 'mysql',
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
 ...

因为我在 Gitlab 上设置了 CI/CD,所以我得到了这个错误:

cp .env.example .env
php artisan migrate:refresh --seed 
In Connection.php line 692:
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = oauth_test and table_name = migrations and table_type = 'BASE TABLE')
In Connector.php line 70:
SQLSTATE[HY000] [2002] Connection refused

我在.env.example文件里也加了DB_HOST_READONLY参数也是127.0.0.1,和DB_HOST参数一样。没有这个改变,我在 .env.example:

中有这个
DB_HOST=127.0.0.1

并在 database.php 文件中:

'host' => env('DB_HOST', '127.0.0.1'),

所有人都被唤醒了。 Gitlab上CI/CD中的变量是:

variables:
  MYSQL_USER: root
  MYSQL_ALLOW_EMPTY_PASSWORD: 1
  MYSQL_DATABASE: oauth_test
  DB_HOST: mysql

你能帮助我或有什么想法吗? 随时询问您是否需要更多东西。

您的 CI 环境中 127.0.0.1 上没有数据库 运行,因此无法 运行 迁移。

正如 AlexD 所解释的,您的 Gitlab 机器在 CI env 上运行,这是另一个用于构建和打包您的应用程序的服务器

为了你 tests/access 要在你 CI build 上建立数据库,你必须提供 URLip 托管数据库的机器的 可以注入你的 gitlab ci 的环境变量,而无需在你的 .env 文件中进行硬编码。

我发现它是如何工作的,也许有人会使用这些信息并帮助他: 进入 .env.testing 需要更改:

DB_HOST=127.0.0.1
DB_HOST_READONLY=127.0.0.1

进入:

DB_HOST=mariadb
DB_HOST_READONLY=mariadb

并进入 gitlab-ci.yml 文件:

variables:
 MYSQL_USER: root
 MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
 DB_HOST: mysql

进入这个:

variables:
 MYSQL_USER: root
 MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
 DB_HOST: mariadb