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

Django CI/CD流水线数据库迁移不生效问题排查与解决

解决Django CI/CD迁移不生效的方案

1. 先在本地生成迁移文件并提交仓库

仓库里没有migrations文件夹是核心问题——CI环境每次都是全新拉取代码,执行makemigrations生成的迁移文件只存在于临时容器里,容器销毁后就没了,migrate自然没东西可执行。

  • 本地运行python manage.py makemigrations <app-name>,对应app下会自动生成migrations文件夹和迁移文件
  • 把migrations文件夹及里面的所有文件一起提交到代码仓库,确保CI环境能读取到这些文件

2. 调整CI/CD中的迁移命令逻辑

没必要在CI里每次都执行makemigrations,正确流程应该是:

  • 代码拉取完成后,直接执行python manage.py migrate,用仓库里已有的迁移文件同步数据库
  • 后续修改模型/新增字段时,都先在本地运行makemigrations生成新的迁移文件,提交到仓库后,CI执行migrate就能自动同步变更

3. 排查Docker入口命令的问题

检查入口脚本的执行细节:

  • 确认<app-name>拼写完全正确,包括大小写,和实际应用名称一致
  • 查看CI日志里makemigrations和migrate的输出,看是否有报错(比如数据库连接失败、用户权限不足、模型变更未被检测到等)
  • 确保容器内的Django配置正确指向PostgreSQL,数据库用户拥有创建、修改表的权限

4. 处理已有数据的迁移注意事项

因为数据库已有数据,新增字段时要避免踩坑:

  • 如果新增字段是必填项(null=False且无默认值),直接迁移会失败,需要先设置默认值、允许为空,或者先给现有数据填充对应值再迁移
  • 本地测试时可以用python manage.py migrate --dry-run模拟执行,提前排查问题

5. 验证迁移结果

执行完migrate后,在CI环境里运行python manage.py showmigrations,查看对应应用的迁移状态,确认所有迁移都标记为已应用;也可以直接连接数据库,用SQL命令检查表结构是否更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:27:30