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

