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(核心操作)
这一步只在开发环境做,完全不会影响生产:
- 找到每个Django app下的
migrations文件夹,删掉里面所有的.py文件(除了__init__.py,如果没有就新建一个空的__init__.py,不然Django会不认这个文件夹)。 - 运行
python manage.py makemigrations,这会根据你当前的models生成一套全新的、干净的初始迁移文件。 - 现在你的开发数据库已经是最新结构了,不需要真的执行迁移,只需要让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时:
- 在开发环境修改models,运行
python manage.py makemigrations生成迁移文件。 - 提交迁移文件到Git,部署到生产环境。
- 在生产环境运行
python manage.py migrate,就能安全地应用迁移了。
关键提醒
绝对不要在生产环境删除migrations文件或者修改django_migrations表!所有操作都只在开发环境做,生产环境只需要通过Git同步migrations文件然后运行migrate就好。
这样操作下来,你的开发环境就能正常跑起来,而且完全不会影响生产环境。以后记得管好migrations,别再让它们被忽略啦!
内容的提问来源于stack exchange,提问作者Enrique Uzcategui
相关产品推荐
相关产品推荐

