Laravel Vapor部署应用报错:SQLite数据库文件不存在如何解决?
修复Laravel Vapor部署后SQLite数据库不存在的错误
问题根源
Laravel Vapor基于AWS Lambda,属于无服务器环境:
- 本地项目里的
database.sqlite文件不会被打包进部署包,所以Vapor运行时找不到该文件 - Lambda的文件系统是临时且只读的,即使手动创建SQLite文件,数据也无法持久化,重启后就会丢失
推荐解决方案:改用云数据库(MySQL/PostgreSQL)
Vapor原生支持AWS RDS云数据库,这是生产环境的标准做法:
- 登录Laravel Vapor控制台,为你的项目创建或关联一个RDS数据库实例(选择MySQL或PostgreSQL)
- 更新项目根目录的
.env文件,替换SQLite配置为云数据库的真实信息:
DB_CONNECTION=mysql # 若用PostgreSQL则填pgsql DB_HOST=你的RDS主机地址 DB_PORT=3306 # PostgreSQL默认是5432 DB_DATABASE=数据库名称 DB_USERNAME=数据库用户名 DB_PASSWORD=数据库密码
- 修改
vapor.yml的build步骤,添加数据库迁移命令(生产环境必须加--force):
id: 45784 name: laravel-new environments: production: memory: 1024 cli-memory: 512 runtime: 'php-8.3:al2' build: - 'composer install --no-dev' - 'php artisan event:cache' - 'php artisan migrate --force' # 新增这行 # - 'npm ci && npm run build && rm -rf node_modules'
- 重新部署项目:
vapor deploy production
临时测试方案:使用内存SQLite(仅用于测试,禁止生产)
如果只是想快速验证项目运行,可改用内存SQLite,但数据不会持久化:
- 修改
config/database.php中的SQLite配置:
'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DB_URL'), 'database' => ':memory:', // 替换为内存数据库标识 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 'busy_timeout' => null, 'journal_mode' => null, 'synchronous' => null, ],
- 同样在
vapor.yml的build步骤添加迁移命令:
build: - 'composer install --no-dev' - 'php artisan event:cache' - 'php artisan migrate --force'
- 重新部署即可,但每次Lambda冷启动后数据都会清空,仅适合测试。
内容的提问来源于stack exchange,提问作者base
相关产品推荐
相关产品推荐

