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

Rails应用部署Heroku后出现PG::UndefinedTable错误(quotes表不存在)

我来帮你一步步排查这个Heroku上Rails应用的问题,从错误日志来看,核心问题是Heroku的PostgreSQL数据库里不存在quotes表,虽然你执行了迁移命令,但肯定有环节出了问题,我们逐一排查:

1. 先确认迁移文件已经推送到Heroku

有时候本地创建了迁移文件,但忘了提交到Git或者推送到Heroku,导致Heroku上根本没有这个迁移文件,自然不会创建表。

执行下面的命令检查本地是否已经提交了迁移文件:

git log --oneline | grep create_quotes

如果能看到类似abc123 Add create_quotes migration的记录,再确认已经推送到Heroku:

git push heroku main # 如果你的主分支是master就用master

如果没提交的话,先完成提交和推送:

git add db/migrate/20180527063820_create_quotes.rb
git commit -m "Add migration to create quotes table"
git push heroku main

2. 重新执行迁移并查看详细日志

有时候迁移命令看起来没报错,但实际执行过程中出了问题,我们重新执行迁移并查看具体日志:

heroku run rake db:migrate

然后查看迁移的执行日志,确认是否有创建quotes表的记录:

heroku logs --ps run

在日志里找类似CREATE TABLE quotes ("id" serial primary key, ...)的语句,如果找不到,说明迁移没有真正执行成功,可能是权限或者其他配置问题。

3. 彻底重置数据库并重新迁移

如果上面的步骤都没问题,那尝试彻底清空Heroku的数据库,然后重新执行迁移:

# 替换YOUR_APP_NAME为你的Heroku应用名称
heroku pg:reset DATABASE --confirm YOUR_APP_NAME 
heroku run rake db:migrate

⚠️ 注意:这个操作会清空数据库里的所有数据,执行前请确认数据可以丢失。

4. 检查Heroku的环境配置

有时候可能不小心设置了错误的RAILS_ENV,导致迁移跑在了错误的环境里,确认一下:

heroku config:get RAILS_ENV

如果输出不是production,设置为production环境:

heroku config:set RAILS_ENV=production

然后重新执行迁移。

额外小提示(不影响当前错误,但建议修复)

看你的quotes_controller.rb的index方法里,有一段代码:

if @quote && @quote.image_url.blank?
  @quote.image_url = get_flickr_image_url(@quote)
  @quote.save
end

这里的@quote变量在index方法里并没有定义(你定义的是复数的@quotes),所以这段代码永远不会执行,建议删掉或者修正,避免后续可能出现的奇怪问题。

内容的提问来源于stack exchange,提问作者That dude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:56