Django部署到Heroku后出现字段不存在的ProgrammingError错误
错误原因
抛出的ProgrammingError: column home_trailerlocation.statusCode does not exist属于Django模型定义与生产数据库表结构不匹配的典型问题:
你在本地开发环境给TrailerLocation模型新增了statusCode字段后,仅在本地执行了数据库迁移,部署到Heroku时未同步在生产环境执行迁移操作,导致生产库的home_trailerlocation表缺少对应字段,代码查询该字段时就会触发报错。你提到访问不同页面触发错误的模型变化但错误本质一致,同样是因为这些对应模型都做了字段调整,但是没有同步更新生产数据库结构导致。
修复步骤
- 首先确认本地所有模型变更都已生成迁移文件:在本地项目根目录执行
python manage.py makemigrations,确保无新的迁移文件生成,所有变更对应的迁移文件都已提交到部署用的代码分支中,避免漏传迁移文件导致后续执行迁移无效。 - 将最新代码推送到Heroku后,执行生产环境迁移命令:
heroku run python manage.py migrate,如果需要指定应用执行可以用heroku run python manage.py migrate home。 - 迁移执行完成后重启Heroku实例保证配置生效:
heroku restart。 - 若迁移过程中出现字段冲突、已有数据兼容问题,因为本次涉及的
statusCode字段配置了null=True, blank=True,无默认值强制要求,基本不会触发此类问题;如果遇到可以先给新增字段设置允许为空或合理默认值,重新生成迁移文件推送后再执行迁移操作。
内容的提问来源于stack exchange,提问作者Nicholas Tallarico
相关产品推荐
相关产品推荐

