Django服务启动失败127.0.0.1拒绝连接,迁移依赖节点不存在如何解决
问题核心
报错明确指向迁移链路断裂:auctions应用下的0003_auto_20201114_0509迁移文件的依赖配置中,引用了不存在的父迁移('auctions', '0002_listing')。Django启动前会校验迁移完整性,校验失败直接终止服务启动,所以才会出现127.0.0.1拒绝连接的现象。
排查步骤
- 进入
auctions/migrations/目录,查看文件列表,确认是否存在0002_listing.py,同时检查是否有其他编号断裂的迁移文件 - 打开
0003_auto_20201114_0509.py,查看头部dependencies字段配置,确认依赖项是否确实为('auctions', '0002_listing')
解决方案
根据是否需要保留现有数据库数据选择对应方案:
方案1:无需保留测试数据(开发场景首选)
- 删除
auctions/migrations/目录下所有编号≥0002的迁移文件,注意保留__init__.py - 删除项目根目录下默认的
db.sqlite3数据库文件 - 依次执行命令重建迁移和数据库:
python3 manage.py makemigrations python3 manage.py migrate - 执行
python3 manage.py runserver即可正常启动服务
方案2:需要保留现有数据库数据
- 先确认
auctions/migrations/目录下实际存在的0002编号迁移文件的完整名称,比如实际文件为0002_auto_20230101_1200.py,就将0003_auto_20201114_0509.py的dependencies字段中对应的('auctions', '0002_listing')修改为('auctions', '0002_auto_20230101_1200') - 若找不到对应0002迁移文件,执行
python3 manage.py showmigrations auctions查看数据库中已记录的auctions应用迁移执行历史,取最后一条已执行的迁移编号作为0003迁移的依赖项即可 - 修改完成后执行
python3 manage.py migrate确认迁移校验通过,再启动服务即可
避坑提示
- 开发阶段不要随意手动删除迁移文件,清理迁移时需要同步删除数据库中的迁移记录或整个测试库
- 多人协作时要确保所有迁移文件同步提交,避免只提交部分迁移导致链路断裂
内容的提问来源于stack exchange,提问作者R12345
相关产品推荐
相关产品推荐

