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

Rails应用部署Heroku遇PG::UndefinedTable等数据库错误求助

Rails部署Heroku后登录/注册页面无法显示的修复方案

报错核心原因

三个报错指向同一个问题:Heroku上的PostgreSQL数据库未完成初始化或配置不匹配:

Puma捕获到错误:PG::UndefinedTable: ERROR: relation "servers" does not exist LINE 9: WHERE a.attrelid = '"servers"'::regclass
无法创建'defml5i7le0i08'数据库,请检查配置
rake中止!ActiveRecord::NoDatabaseError: 未找到数据库postgres,请查看config/database.yml配置文件

分步修复

1. 验证Heroku数据库状态

Heroku会自动为Rails应用分配PostgreSQL数据库,先确认数据库是否存在:

heroku pg:info

如果输出无数据库信息,执行以下命令添加免费版数据库:

heroku addons:create heroku-postgresql:hobby-dev

2. 执行数据库迁移

本地正常但Heroku缺表,是因为没在Heroku上运行迁移命令:

heroku run rails db:migrate

若迁移时提示数据库不存在,可重置数据库(注意:会清空所有数据,确认后操作):

heroku run rails db:reset

或分步执行初始化:

heroku run rails db:create
heroku run rails db:migrate

3. 修正config/database.yml生产环境配置

确保生产环境配置完全依赖Heroku的环境变量,不要硬编码数据库名:

production:
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  url: <%= ENV['DATABASE_URL'] %>

删除生产环境中database: postgres这类固定配置项,避免和Heroku自动生成的数据库冲突。

4. 确认DATABASE_URL环境变量

检查Heroku是否正确配置了数据库链接:

heroku config:get DATABASE_URL

如果无输出,从heroku pg:info的输出中复制数据库链接,手动设置:

heroku config:set DATABASE_URL=你的数据库链接地址

5. 重启应用生效

完成所有配置后,重启Heroku应用:

heroku restart

内容的提问来源于stack exchange,提问作者Luke Littler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:17