Django应用在Heroku上执行migrate命令未生效该如何处理
Heroku Django 迁移未生效排查解决步骤
- 优先确认迁移文件已同步到Heroku服务端
Heroku运行时仅读取你推送至平台的代码,若本地新增的迁移文件未完成commit并push到Heroku关联的代码分支,执行migrate命令时只会调用服务端已有的旧迁移文件,自然不会执行新变更,也不会出现*No migrations to apply.*的提示。你可以运行heroku run ls <你的应用名>/migrations/查看服务端存储的迁移文件列表,和本地文件比对,确认所有迁移文件都已成功上传。 - 校验数据库连接配置是否正确
确认Django settings.py中的DATABASES配置没有硬编码本地数据库地址,已正确读取Heroku自动注入的DATABASE_URL环境变量。你可以运行heroku run python manage.py shell进入交互终端,执行以下代码验证当前连接的数据库信息:
from django.conf import settings print(settings.DATABASES['default'])
对比输出的数据库地址、用户名等信息和Heroku控制台绑定的数据库附加组件信息一致,避免迁移被错误执行到其他数据库实例。
- 检查迁移执行状态记录
运行heroku run python manage.py showmigrations查看所有迁移的执行状态,标有[X]的为已执行迁移,标有[ ]的为未执行迁移。你也可以直接连接Heroku数据库,查询django_migrations表的记录,确认迁移是否已经被标记为已执行。 - 针对指定应用执行迁移
如果全局migrate未生效,可以尝试指定应用名执行迁移,部分场景下全局迁移会因为依赖问题跳过部分应用的变更:heroku run python manage.py migrate <你的应用名> - 重新部署后再执行迁移
Heroku的heroku run命令会启动独立的临时dyno,若存在代码缓存未更新的问题,可以先重新推送一次最新代码再执行迁移:
git add . git commit -m "补充最新迁移文件" git push heroku main heroku run python manage.py migrate
内容的提问来源于stack exchange,提问作者Matias Coco
相关产品推荐
相关产品推荐

