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

Django使用Dokku部署时报ValueError: Dependency on app with no migrations错

问题根源

你执行dokku run生成的迁移文件仅存在于当前临时运行的容器中,命令执行完容器销毁后文件就消失了,后续执行migrate时自然找不到accounts应用的迁移文件,才会抛出依赖缺失错误。后续的迁移死循环、表单提交失败也都和部署流程配置错误相关。

解决方案

第一步:禁止在部署流程自动运行makemigrations

Django 官方明确要求迁移文件需要跟随代码提交到版本仓库,不要在生产环境自动生成迁移,先把你部署配置里自动执行makemigrations的步骤删掉。

第二步:本地生成所有迁移文件并提交

在你的开发环境执行以下命令,确保所有自定义应用的迁移文件都生成好:

python manage.py makemigrations accounts gradebook
python manage.py migrate

确认accounts/migrations/、gradebook/migrations/目录下有生成的0001_initial.py等迁移文件,且目录下存在__init__.py文件,把这些文件全部提交到代码仓库。

第三步:配置Dokku部署时仅运行migrate

在项目根目录创建Procfile文件(如果没有的话),或者修改你现有的部署钩子配置,保证部署时只执行migrate命令,不要执行makemigrations。如果用的是Heroku风格的release命令,Procfile里加一行:

release: python manage.py migrate

也可以用Dokku的release脚本配置,效果一致。

第四步:清理生产环境残留的异常迁移状态

如果之前手动执行过迁移导致数据库里django_migrations表有脏数据,执行以下命令重置:

# 进入Dokku应用的shell
dokku run gradebook python manage.py shell

在shell里执行:

from django.db import connection
with connection.cursor() as cursor:
    cursor.execute("DELETE FROM django_migrations WHERE app='accounts' OR app='gradebook'")

然后退出shell,重新推送代码部署,Dokku会自动执行release阶段的migrate命令,应用你提交到代码里的迁移文件。

第五步:排查表单提交错误

表单提交超时大概率不是nginx的问题,是Django服务内部错误,你可以先开启DEBUG模式临时查看报错,或者执行dokku logs gradebook查看应用运行日志定位错误,常见原因包括:

  • 生产环境ALLOWED_HOSTS配置错误
  • django-allauth的站点ID配置和生产环境不匹配
  • CSRF_TRUSTED_ORIGINS没有配置生产域名
迁移死循环解决

你遇到的account应用(来自django-allauth)变更提示,是因为你本地的django-allauth版本和生产环境安装的版本不一致,确保本地requirements.txt里的django-allauth版本固定,和生产环境安装的版本完全一致,重新在本地生成对应迁移提交到仓库即可解决。

内容的提问来源于stack exchange,提问作者Doug Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:42:02