Django部署Heroku执行migrate成功仍提示21个未应用迁移且报500错误
问题根本原因
你遇到的迁移已执行却仍提示未应用的问题,核心是Heroku的运行机制导致的:
heroku run命令每次启动的都是独立的一次性临时dyno,所有在该dyno运行期间生成的文件都会在命令结束后销毁,不会同步到你的部署代码和其他dyno。- 如果你没有将本地生成的迁移文件提交到Git并推送到Heroku,Heroku上的代码缺少完整迁移记录,就会出现明明执行过migrate,其他进程还是检测到未应用迁移的情况。
修复步骤
- 先排查本地Git忽略规则,确认你的
.gitignore没有全局屏蔽所有app下的migrations/目录,仅需要忽略migrations/__pycache__目录即可,不要忽略migrations下的.py迁移文件。 - 在本地项目根目录执行命令生成所有迁移:
python manage.py makemigrations - 确认所有应用的
migrations/目录下都生成了对应的迁移文件后,提交代码到Git并推送到Heroku:git add . git commit -m "补充所有缺失的迁移文件" git push heroku main # 若你的主分支名为master,将main替换为master - 推送完成后重新在Heroku执行迁移:
heroku run -a fathomless-cliffs-95117 python manage.py migrate - 执行以下命令验证迁移状态,确认所有迁移前都标记了
[X]代表已应用:heroku run -a fathomless-cliffs-95117 python manage.py showmigrations
500错误其他排查方向
如果迁移问题解决后访问仍返回500,可通过Heroku日志查看具体报错:
heroku logs --tail -a fathomless-cliffs-95117
常见的部署遗漏点包括:
ALLOWED_HOSTS配置中没有添加你的Heroku应用域名- 没有配置
whitenoise处理静态资源 - 生产环境缺失必要的环境变量(如SECRET_KEY、数据库连接参数等)
- 生产环境
DEBUG设置为False时没有配置对应的静态资源访问规则
内容的提问来源于stack exchange,提问作者David Balaban
相关产品推荐
相关产品推荐

