Django项目本地运行正常 部署到Heroku报main_chapter表不存在错误
错误根因
relation "main_chapter" does not exist是PostgreSQL的原生报错,意为数据库中不存在main_chapter表,和你使用的psycopg2/psycopg2-binary包无任何关联。
Django默认会按照<APP名称>_<模型类小写名>的规则生成数据库表名,你的main应用下一定定义过名为Chapter的模型类,因此对应表名就是main_chapter。你本地运行正常是因为本地数据库已经执行过迁移生成了对应表,而Heroku上的PostgreSQL数据库没有执行迁移,因此缺少该表。
解决方案
- 首先确认你没有把各APP下的
migrations目录加入.gitignore,所有迁移文件都已提交到代码仓库 - 推送最新代码到Heroku后,执行Heroku CLI命令运行数据库迁移:
heroku run python manage.py migrate - 如果执行迁移后仍报错,可手动验证表是否存在:运行
heroku run python manage.py dbshell进入数据库命令行,输入\d查看所有表,确认main_chapter是否在列表中 - 如果确认表未生成,先检查
main应用是否已添加到settings.py的INSTALLED_APPS列表,未加入的话Django不会识别该应用的迁移文件 - 如果是之前误删了
main应用的迁移文件,可本地重新生成迁移:
提交新生成的迁移文件后重新推送到Heroku,再次执行迁移命令即可。python manage.py makemigrations main
psycopg2相关说明
Heroku环境安装原生psycopg2容易缺少编译依赖报错,使用psycopg2-binary是官方推荐的部署方案,完全不会引发上述问题,无需调整。
内容的提问来源于stack exchange,提问作者Onur
相关产品推荐
相关产品推荐

