使用Vapor在Heroku做数据库迁移时报No default database configured错误
问题解决方案
1. 检查数据库默认配置逻辑
该错误90%的概率是生产环境下没有为Fluent指定默认数据库,打开项目configure.swift文件,确认数据库配置代码包含默认库声明:
// 以PostgreSQL为例,首先从环境变量读取Heroku的数据库连接串 guard let dbURL = Environment.get("DATABASE_URL") else { fatalError("DATABASE_URL not found in environment") } // 注册数据库驱动 try app.databases.use(.postgres(url: dbURL), as: .psql) // 必须显式声明默认数据库,否则迁移时会找不到默认库 app.databases.default(to: .psql)
不要将数据库配置逻辑放在仅开发环境执行的判断分支内,被if app.environment == .development {}包裹的代码生产环境不会执行,会触发该报错。
2. 校验环境变量读取匹配性
- 确认代码中读取的数据库连接串变量名和Heroku上的配置名完全一致,Heroku官方PostgreSQL插件默认生成的连接串变量是
DATABASE_URL,如果你的代码里读取的是自定义变量名(比如DB_URL),要么修改代码匹配,要么在Heroku后台新增对应变量。 - 执行命令
heroku run echo $DATABASE_URL确认运行时dyno可以正常读取到数据库连接串,避免变量配置未生效。
3. 校验迁移命令参数
确认你执行的迁移命令中可执行文件名和项目配置一致,Vapor默认的可执行文件名为Run,如果你的项目修改过Scheme名称,需要替换命令中的对应部分:
# 标准迁移命令格式 heroku run <你的可执行文件名> -- migrate --env production
如果临时需要绕开默认配置问题,可以在迁移命令中显式指定目标数据库:
heroku run Run -- migrate --env production --database psql
内容的提问来源于stack exchange,提问作者jorgemht
相关产品推荐
相关产品推荐

