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

安装Laravel Horizon后CI流水线执行Artisan命令失败

解决Laravel 11 + Horizon 5.31 CI流水线中package:discover的SQLite连接错误

这个错误是因为Horizon在包发现过程中会尝试连接数据库,而CI环境里SQLite数据库文件不存在、路径配置错误或者权限不足导致的。以下是几种可行的解决办法:

  • 创建SQLite数据库文件
    在CI流水线脚本中,执行package:discover前先生成数据库文件:

    mkdir -p database
    touch database/database.sqlite
    

    若用临时路径更灵活,可在CI环境变量中指定:

    export DB_DATABASE=/tmp/database.sqlite
    
  • 在CI环境禁用Horizon服务
    在CI的.env配置中添加HORIZON_ENABLED=false,Horizon将不会注册依赖数据库连接的服务,包发现时就不会触发数据库操作。

  • 调整文件权限
    确保运行Artisan命令的用户对数据库目录拥有读写权限:

    chmod -R 755 database
    

    可根据CI环境的用户身份,用chown调整目录归属。

  • 按需加载Horizon服务
    修改Horizon服务提供者的注册逻辑,仅在非CI环境加载Horizon:

    // app/Providers/HorizonServiceProvider.php
    public function register()
    {
        if (!env('CI', false)) {
            $this->app->register(\Laravel\Horizon\HorizonServiceProvider::class);
        }
    }
    

报错信息参考:

php artisan package:discover --ansi

Illuminate\Database\QueryException 

SQLSTATE[HY000] [14] unable to open database file (Connection: sqlite, SQL: PRAGMA foreign_keys = ON;)

at vendor/laravel/framework/src/Illuminate/Database/Connection.php:825
  821▕                     $this->getName(), $query, $this->prepareBindings($bindings), $e
  822▕                 );
  823▕             }
  824▕ 
➜ 825▕             throw new QueryException(
  826▕                 $this->getName(), $query, $this->prepareBindings($bindings), $e
  827▕             );
  828▕         }
  829▕     }

    +45 vendor frames

46  artisan:13
    Illuminate\Foundation\Application::handleCommand()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:39:57