繁体   English   中英

docker 容器的 Django 迁移

[英]Django migrations for docker container

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

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

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 并进行迁移。

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

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

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

  1. migrate操作很危险,您永远不应该自动执行此操作。
  2. 入口点文件的推荐默认行为是运行您的应用服务器。
  3. 如果要迁移数据库,请尝试docker exec在容器中运行命令。

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

然后,经过几次修改,你应该有类似的东西:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM