南迁移:删除所有迁移文件(00*_*),从0001开始,同时保留原有数据

Ran*_*ang 5 migration deployment heroku django-south

我正在使用 Django 开发 Web 系统,它们部署在 Heroku 上。系统投入生产后,必须保留所有数据库数据和迁移文件(即00*_* 文件)。以下是我执行数据库迁移和部署的过程:

  1. 对于第一次部署,在manage.py makemigrations本地执行并推送到 Heroku。

  2. manage.py migrate在 Heroku 上执行。

如果稍后更改模型:

  1. makemigrations在本地执行并推送到 Heroku。

  2. migrate在 Heroku 上执行。

如果模型发生变化,则重复第 3 步和第 4 步。

随着系统的发展,有越来越多的迁移文件。我想知道:在成功迁移和部署后,我可以删除所有迁移文件并重新开始吗?那是:

  1. 对于第一次部署,在makemigration本地执行并推送到 Heroku。

  2. migrate在 Heroku 上执行。

  3. 删除所有本地迁移文件。

  4. makemigrations在本地执行以创建看似启动的迁移文件。

更改型号:

  1. makemigration在本地执行并推送到 Heroku。

  2. migrate在 Heroku 上执行。

如果模型发生变化,则重复步骤 3 到 6。

上述程序是否正确?

Rég*_* B. 5

对于您的每个应用程序:

1)假装回滚所有现有的迁移:

./manage.py migrate app zero --fake
Run Code Online (Sandbox Code Playgroud)

zero参数表明我们回滚到第一次迁移。您可以通过运行来确认所有迁移都已回滚./manage.py migrate app --list。该--fake选项的信号,我们不应该在实际运行迁移,但仍然标记迁移为已经运行:https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---伪造的

2)。删除迁移文件

git rm app/migrations/*
Run Code Online (Sandbox Code Playgroud)

3) 创建一个新的迁移文件

./manage.py makemigrations app
Run Code Online (Sandbox Code Playgroud)

4) 假装运行新的迁移

./manage.py migrate app --fake
Run Code Online (Sandbox Code Playgroud)

与 1) 一样,步骤 4) 并未实际运行迁移。

编辑:添加了一些解释并修正了zero论点。

  • 我建议您像往常一样在 1) 之前对模型进行所有必要的修改。只需在本地运行 makemigration 并在 heroku 上迁移。 (2认同)