You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions Runner无法连接SQLite数据库问题排查

问题分析

迁移命令能成功连接SQLite,但PHPUnit测试抛出MySQL连接错误(SQLSTATE[HY000] [2002]),说明测试执行时Laravel没有使用SQLite配置,而是默认回退到MySQL的连接逻辑。核心原因是测试环境的数据库配置没有正确加载或被覆盖。

解决方案

1. 确保.env.testing文件配置正确

Laravel在testing环境下会优先读取.env.testing文件,若该文件存在,工作流中设置的环境变量会被覆盖。检查项目根目录是否有.env.testing文件,确保内容包含:

APP_ENV=testing
DB_CONNECTION=sqlite
DB_DATABASE=/home/runner/work/[你的仓库名]/[你的仓库名]/database-ci/database.sqlite

注意:SQLite的路径必须是绝对路径,GitHub Actions的工作目录通常为/home/runner/work/[仓库名]/[仓库名]/,可通过工作流中的pwd命令确认路径后替换。

2. 修正phpunit.xml的配置

即使修改了DB_DATABASE的值,也可能因配置加载顺序问题未生效。确保phpunit.xml中的数据库配置与工作流一致,且添加DB_HOST避免Laravel触发MySQL连接逻辑:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="MAIL_MAILER" value="array"/>
    <env name="PULSE_ENABLED" value="false"/>
    <env name="QUEUE_CONNECTION" value="sync"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="DB_DATABASE" value="/home/runner/work/[你的仓库名]/[你的仓库名]/database-ci/database.sqlite"/>
    <env name="DB_HOST" value="localhost"/> <!-- 新增:避免触发MySQL连接逻辑 -->
</php>

3. 在工作流中添加配置清除步骤

Composer安装后可能生成配置缓存,导致测试时加载旧的数据库配置。在Install Dependencies步骤后添加:

- name: Clear Configuration Cache
  run: php artisan config:clear

4. 强制测试使用指定环境

执行PHPUnit测试时,明确指定使用testing环境,避免环境混淆:

- name: Execute tests via PHPUnit
  env:
    DB_CONNECTION: sqlite
    DB_DATABASE: /home/runner/work/[你的仓库名]/[你的仓库名]/database-ci/database.sqlite
  run: php artisan test --env=testing

5. 检查config/database.php的测试环境配置

确保config/database.php中testing环境的SQLite配置正确:

'testing' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('testing.sqlite')),
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],
验证步骤

在工作流中添加步骤打印测试环境的配置,确认SQLite参数正确:

- name: Print Test Environment Config
  run: php artisan config:get database.connections.sqlite --env=testing

执行工作流后,查看该步骤输出,确认database路径正确且driver为sqlite。

内容的提问来源于stack exchange,提问作者domjanzsoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 13:27:07