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

Django项目migrations文件缺失、开发与生产环境migrations不一致的处理方案咨询

嘿,这种migrations混乱的情况我见得太多了,别担心,只要按步骤来,完全能搞定,而且绝对不会碰坏生产环境。咱们一步步来:

第一步:先把备份做了,稳字当头

  • 先给生产环境数据库做个完整备份,用你数据库对应的工具:比如PostgreSQL用pg_dump your_db_name > prod_backup.sql,MySQL用mysqldump -u username -p your_db_name > prod_backup.sql。这一步是底线,万一出问题能立刻回滚。
  • 顺便把开发环境的数据库也备份了,别丢了本地的测试数据。

第二步:让开发环境数据库和生产对齐

  • 把刚才导出的生产数据库备份导入到开发环境,这样你的本地数据库结构(甚至数据)就和生产完全一致了。这一步能确保你的本地models和实际运行的数据库结构是匹配的——毕竟如果models和生产结构不一样,后续的migrations还是会出问题。
  • 导入完之后,对比下本地的models.py和数据库结构,确认没有不一致的地方(比如前任可能改了models但没同步到生产?不过这种情况概率低,先假设models是对的)。

第三步:重置开发环境的migrations(核心操作)

这一步只在开发环境做,完全不会影响生产:

  1. 找到每个Django app下的migrations文件夹,删掉里面所有的.py文件(除了__init__.py,如果没有就新建一个空的__init__.py,不然Django会不认这个文件夹)。
  2. 运行python manage.py makemigrations,这会根据你当前的models生成一套全新的、干净的初始迁移文件。
  3. 现在你的开发数据库已经是最新结构了,不需要真的执行迁移,只需要让Django“以为”这些迁移已经应用过了。运行python manage.py migrate --fake——这个命令只会更新Django的django_migrations表,标记所有新迁移为已应用,但不会动数据库的结构(因为数据库已经是对的了)。

第四步:把migrations加入版本控制,杜绝后患

  • 现在开发环境有了干净的migrations文件,把它们加到Git里:git add */migrations/*.py */migrations/__init__.py,注意别把__pycache__或者.pyc文件加进去。
  • 打开你的.gitignore文件,把之前忽略migrations/的规则删掉(如果有的话),改成只忽略migrations/__pycache__/和migrations/*.pyc。这样以后新生成的migrations文件都会被Git跟踪,开发和生产环境的migrations就能保持同步了。

第五步:后续的迁移流程(划重点)

以后开发新功能需要修改models时:

  1. 在开发环境修改models,运行python manage.py makemigrations生成迁移文件。
  2. 提交迁移文件到Git,部署到生产环境。
  3. 在生产环境运行python manage.py migrate,就能安全地应用迁移了。

关键提醒

绝对不要在生产环境删除migrations文件或者修改django_migrations表!所有操作都只在开发环境做,生产环境只需要通过Git同步migrations文件然后运行migrate就好。

这样操作下来,你的开发环境就能正常跑起来,而且完全不会影响生产环境。以后记得管好migrations,别再让它们被忽略啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 15:42:36