安装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
相关产品推荐
相关产品推荐

