首页 > 解决方案 > Django 丢失了迁移文件

问题描述

我有一个连接到 postgresql 数据库的 django 应用程序(在 AWS 上运行的 RDS 实例)

最近,我在我的数据库表中添加了新字段,但忘记在makemigrations本地运行并将代码推送到服务器。由于未应用更改,服务器出现故障,为了快速解决问题,我决定直接在应用程序的 docker 容器中运行makemigrationsmigrate我认为它会生成迁移文件,但不幸的是,它没有。迁移是在数据库级别应用的,但没有更改的迁移文件。

在容器中运行python manage.py showmigrations时,它输出:

redirect
 [X] 0001_initial
 [X] 0002_redirect_clicks
 [X] 0003_redirect_name

但是在数据库中,运行SELECT * FROM django_migrations;表明还有一个迁移:

103 | redirect           | 0004_auto_20210707_2039     | 2021-07-07 14:39:19.058233+00

你有什么建议?我想在makemigrations本地运行,生成文件并将其推送到 vcs,然后在服务器上使用migrate --fake.

我不知道这到底是做什么的,我太害怕在没有指导的情况下这样做,任何帮助将不胜感激

标签: djangopostgresqldjango-migrations

解决方案


当前解决方案(不理想):

我在本地生成了迁移文件,将其推送到 VCS,在远程服务器上,我不得不取消应用应用程序的所有迁移python manage.py migrate <app_name> zero(这导致应用程序中的数据库表数据丢失,因此在执行此操作之前请三思而后行)然后应用再次使用它们,但现在使用第一步中生成的迁移文件。一切恢复正常,但显然有更好的解决方案


推荐阅读