如何在docker中迁移django中的数据库

ohfgkhjo  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(339)

我有一个docker compose项目,有两个运行nginx和gunicorn的容器和我的django文件。我也有一个数据库以外的docker在aws rds。我的问题和这个相似。但是,这个问题与docker compose中的数据库有关。我的在外面。
所以,如果我为我的容器打开一个bash终端并运行 py manage.py makemigrations 问题是django项目中的迁移文件,例如: /my-django-project/my-app/migrations/001-.py 将与存储已应用迁移的数据库不同步。这将发生,因为我的容器可以关闭和打开一个新的容器在任何时候。迁移文件将不会保存。
我的想法是:
使用 volume 在docker compose内部,但由于migrations文件夹分布在所有django应用程序上,这可能很难实现。
在docker之外处理迁移,这需要某种“主”项目来存储迁移文件。这似乎不是一个好主意,因为整个项目将依赖于一些现有的本地文件。
我正在寻找关于如何处理迁移的良好实践的建议。
编辑:
这是docker-compose.yml,我正在本地运行 docker-compose up 并在生产中使用 docker compose up . 我遗漏了一些我认为无关紧要的配置。
docker-compose.yml公司

version: '3'

services:
  web:
    image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/django:${IMAGE_TAG}
    build:
      context: .
      dockerfile: ./Dockerfile
    networks: 
      - demoapp
    environment:
      - DEBUG=${DEBUG}
      - SECRET_KEY=${SECRET_KEY}

  nginx:
    image: <secret>.dkr.ecr.eu-west-3.amazonaws.com/api-v2/nginx:${IMAGE_TAG}
    build:
      context: .
      dockerfile: ./nginx.Dockerfile
    ports:
      - 80:80
    depends_on:
      - web
    networks: 
      - demoapp
am46iovg

am46iovg1#

问题归结为我将django生成的迁移文件存储在哪里 py manage.py makemigrations 我什么时候/在哪里跑步 py manage.py migrate . 正如404pio所建议的,您可以像github一样简单地将这些存储在代码repo中。
所以我的工作流程是这样的:
在我的本地开发环境中,运行 py manage.py makemigrations 以及 py manage.py migrations ,(目标是像sqlite这样的开发数据库)。
如果一切正常,提交并推到git。
(我正在使用circleci测试和部署我的django项目,但这也可以手动完成。)circleci在git push之后运行管道。在管道中,我已经作为最后一步运行 py manage.py migrate . 这必须在应用程序部署之后进行,因为这可能会失败,然后您不想迁移。

相关问题