首页 > 解决方案 > 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_HOSTmysql,这通常有效,但这次不行。我不确定为什么。

标签: phplaravelcontinuous-integrationgitlab

解决方案


我可以通过设置来解决这个DB_HOST=mysql问题.gitlab-ci.yml

变量:

    MYSQL_DATABASE: homestead

    MYSQL_ROOT_PASSWORD: secret

    DB_HOST: mysql

这会覆盖设置的变量,.env.testing以允许测试运行而无需在主机上进行任何进一步的配置。


推荐阅读