php - Gitlab Ci Laravel PDOException: SQLSTATE[HY000] [2002] No such file or directory
问题描述
我的 laravel 测试在我的机器上运行得非常好,但是当通过 docker 在 gitlab-runner 上运行时,我在所有测试中都看到了这一点:
...
Caused by
PDOException: SQLSTATE[HY000] [2002] No such file or directory
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:46
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php:24
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:182
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:916
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:941
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:399
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:325
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:657
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:624
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Connection.php:333
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php:99
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Schema/MySqlBuilder.php:48
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php:73
/builds/project-0/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/FreshCommand.php:46
/builds/project-0/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29
/builds/project-0/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:87
/builds/project-0/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:31
/builds/project-0/vendor/laravel/framework/src/Illuminate/Container/Container.php:572
/builds/project-0/vendor/laravel/framework/src/Illuminate/Console/Command.php:183
/builds/project-0/vendor/symfony/console/Command/Command.php:255
/builds/project-0/vendor/laravel/framework/src/Illuminate/Console/Command.php:170
/builds/project-0/vendor/symfony/console/Application.php:886
/builds/project-0/vendor/symfony/console/Application.php:262
/builds/project-0/vendor/symfony/console/Application.php:145
/builds/project-0/vendor/laravel/framework/src/Illuminate/Console/Application.php:89
/builds/project-0/vendor/laravel/framework/src/Illuminate/Console/Application.php:188
/builds/project-0/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:250
/builds/project-0/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php:136
/builds/project-0/vendor/laravel/framework/src/Illuminate/Foundation/Testing/PendingCommand.php:218
/builds/project-0/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/InteractsWithConsole.php:55
/builds/project-0/tests/RefreshAndSeedDatabase.php:61
/builds/project-0/tests/RefreshAndSeedDatabase.php:20
/builds/project-0/tests/TestCase.php:21
/builds/project-0/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:71
...
这是我的.env.testing
:
...
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret
...
我的.gitlab-ci.yml
:
image: composer
stages:
- setup
- test
- deploy
phpunit:
stage: test
image: epcallan/php7-testing-phpunit:7.2-phpunit6
services:
- mysql:5.7
variables:
MYSQL_DATABASE: homestead
MYSQL_ROOT_PASSWORD: secret
before_script:
- apt-get install -y libpng-dev libfreetype6-dev libjpeg62-turbo-dev
- docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/
- docker-php-ext-install gd
script:
- cp .env.testing .env
- composer install
- php artisan key:generate
- php artisan passport:key
- php vendor/bin/phpunit --coverage-text --colors=never --coverage-html=public/tests/coverage
我试过改成DB_HOST
喜欢127.0.0.1
这里建议的,但这没有帮助。
在我的其他 laravel 项目中有效的解决方案是设置DB_HOST
为mysql
,这通常有效,但这次不行。我不确定为什么。
解决方案
我可以通过设置来解决这个DB_HOST=mysql
问题.gitlab-ci.yml
:
变量:
MYSQL_DATABASE: homestead
MYSQL_ROOT_PASSWORD: secret
DB_HOST: mysql
这会覆盖设置的变量,.env.testing
以允许测试运行而无需在主机上进行任何进一步的配置。
推荐阅读
- python - 如何基于 GPIO Python3 制作拨动开关
- python - 禁止在数据类成员上调用的方法
- kubernetes - Istio 中断 SFTP 通信
- python-3.x - 如何标记具有正面和负面情绪词的评论
- javascript - 在javascript中修改并写入输入的html值
- regex - 正则表达式/记事本++从文件中提取文本
- python - 有没有办法使用for循环让每个LED在按下按钮时闪烁?
- rest-assured - 如何配置 RestAssured http 客户端以使用 socks 代理?
- javascript - Jest 测试创建空的 blob 对象
- javascript - 用axios调用api