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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:45:03