【问题标题】:Django migrations for docker containerDocker 容器的 Django 迁移
【发布时间】:2020-12-29 08:40:55
【问题描述】:

我一直在尝试解决我目前遇到的问题,但我在这里或其他地方都没有找到任何适当的解决方案,所以我希望这里的人可能有答案。我已经到了一个我知道问题是什么但不知道如何解决它的地步。

基本上我有一个运行 django/postgres/nginx 的网站,它运行流畅,我可以制作新模型并迁移它们,但是如果我尝试向模型添加一个字段:

from django.db import models

class project(models.Model):
    project_name = models.CharField(max_length=50)
    author = models.CharField(max_length=30, blank=True, null=True)
    date_created = models.DateField()
    #Added in second round of migrations 
    #Description = models.CharField(max_length=150,blank=True, null=True)

我通常会做的是最初构建并启动我的容器

sudo docker-compose -f docker-compose.yml up --build

在我的入口点文件中,我运行 makemigrations 并迁移。

第一轮它运行良好,但如果我将描述字段添加到我的模型中,旋转并重建容器以允许新字段包含在我的容器中,新容器将在没有初始迁移的情况下构建,并且而不是新的迁移。这导致任何以前的 postgres 表都没有添加新字段,并且当我尝试请求数据时出现服务器错误 500,因为以前的表现在没有预期的列。

因此,我的问题是您通常如何管理容器化 django 应用程序的模型以确保您维护所有迁移?还是有其他我不知道的解决方案?

这可能是一个愚蠢的问题,但我对此很陌生,希望您能提供任何帮助。

【问题讨论】:

    标签: django postgresql docker django-models docker-compose


    【解决方案1】:

    makemigrations应该在开发阶段完成,并将迁移文件(000x前缀文件)添加到源代码管理中。

    然后,经过几次修改,你应该有这样的:

    0001_first_round_change.py
    0002_second_round_change_for_description.py
    ......
    

    每次docker容器启动时,迁移这些文件,在Django Commands: makemigrations or migrate?中可以看到一个有用的操作过程

    而且,here 是一个开源项目示例,他们使用相同的方法进行迁移,仅供参考。

    【讨论】:

    • 啊哈,好吧,这对我来说真的很有意义。因此,为了完全确定,目前我正在本地运行我的 postgres 作为我的 docker-compose 文件中的服务。在不同的情况下,我想我只会在容器之外运行开发,但仍然保留对例如托管的 RDS 的访问权限。亚马逊。所以我仍然可以在 dev 中使用数据库?
    • 我不确定我能抓住你。我的理解是:开发阶段可以独立于操作阶段。请注意每个数据库结构更改为makemigrations。然后在生产环境中对所有迁移文件执行migrate,如果数据库发生变化,该命令将直接跳过它,如this。所以在本地开发可以使用本地容器,在本地不使用容器也可以,这取决于您的开发习惯。先给自己做个实验也许更好……
    【解决方案2】:
    1. migrate 操作很危险,千万不要自动执行。
    2. 入口点文件的推荐默认行为是运行您的应用服务器。
    3. 如果您想迁移数据库,请尝试docker exec 在容器中运行命令。

    【讨论】:

    • 感谢您的建议,我将从入口点文件中删除迁移并牢记建议的行为。但是我之前尝试过使用exec 命令运行,但这仍然不能解决每次重建模型时迁移被擦除的问题。目前我在旋转后修改模型,并且当我旋转并构建任何makemigration 调用时,我不会保存到我的本地机器
    • @AlexS 你应该在本地机器上运行 makemigration 并将迁移文件添加到 git。见docs.djangoproject.com/en/3.1/topics/migrations/#workflow
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-07-15
    • 2017-05-06
    相关资源
    最近更新 更多