django - Django/Docker:未检测到迁移且未应用
问题描述
堆栈:Django/Docker/Docker-compose/Postgresql(不在容器中)
我进行了修改,包括模型更新、保存并推送到我的远程 Gitlab 存储库。
然后,我从 preprod 服务器上的 Gitlab 存储库中提取了修改,我可以看到服务器上有修改后的版本。
但是当我停止并重新启动容器时,它不会检测到任何更改并且不会应用迁移。我还检查了,该entrypoint.preprod.sh
文件包含makemigrations
andmigrate
命令。
我尝试过重建它docker-compose build
然后运行它,但它不再起作用了。
我尝试直接连接到我的容器 ( docker exec -it web sh
) 但未makemigrations
检测到,因此未应用迁移。
我一定错过了什么,但是什么?
docker-compose-preprod.yml
version: '3.7'
services:
web:
restart: always
container_name: virage_web
build:
context: ./app
dockerfile: Dockerfile.preprod
restart: always
command: gunicorn core.wsgi:application --bind 0.0.0.0:8000
volumes:
- app_volume:/usr/src/app
- static_volume:/usr/src/app/static
- media_volume:/usr/src/app/media
expose:
- 8000
env_file:
- ./.env.preprod
entrypoint: [ "/usr/src/app/entrypoint.preprod.sh" ]
depends_on:
- redis
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/"]
interval: 30s
timeout: 10s
retries: 50
redis:
container_name: virage_redis
image: "redis:alpine"
celery:
container_name: virage_celery
build:
context: ./app
dockerfile: Dockerfile.preprod
command: celery -A core worker -l info
volumes:
- app_volume:/usr/src/app
env_file:
- ./.env.preprod
depends_on:
- web
- redis
celery-beat:
container_name: virage_celery-beat
build:
context: ./app
dockerfile: Dockerfile.preprod
command: celery -A core beat -l info
volumes:
- app_volume:/usr/src/app
env_file:
- ./.env.preprod
depends_on:
- web
- redis
nginx:
container_name: virage_nginx
build: ./nginx
restart: always
volumes:
- static_volume:/usr/src/app/static
- media_volume:/usr/src/app/media
ports:
- 1350:80
depends_on:
- web
volumes:
static_volume:
media_volume:
app_volume:
Dockerfile.preprod
# Pull the official base image
FROM python:3.8.3-alpine
# Set a work directory
WORKDIR /usr/src/app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install psycopg2 dependencies
RUN apk update && apk add postgresql-dev gcc g++ python3-dev musl-dev
RUN apk --update add libxml2-dev libxslt-dev libffi-dev musl-dev libgcc openssl-dev curl postgresql-client
RUN apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev nano
RUN pip3 install psycopg2 psycopg2-binary
# install xgettext for i18n
RUN apk add gettext
# Install dependencies
COPY requirements/ requirements/
RUN pip install --upgrade pip && pip install -r requirements/preprod.txt
# Copy the entrypoint.sh file
COPY entrypoint.preprod.sh .
# Copy the initdata sql file
COPY initdata.preprod.sql .
# Copy the project's files
COPY . .
RUN chmod +x entrypoint.preprod.sh
入口点.preprod.sh
#!/bin/sh
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $SQL_HOST $SQL_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
# python manage.py flush --no-input
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --no-input
python manage.py makemessages -l fr
python manage.py compilemessages
exec "$@"
解决方案
推荐阅读
- c++ - 有效的双向范围枚举映射
- c# - CS0103 C# AND ASP.net 当前上下文中不存在名称“模型”
- sql - sql max 函数用法
- java - Java单调递增哈希函数
- excel - 如何根据另一个工作表上的单元格值隐藏/显示跨多个工作表的行
- python - 图形用户界面错误。无法取消绘制“矩形”对象
- angular - 在 Angular 7 中链接动态数量的 HTTP 调用
- html - 调整屏幕大小时,我的元素将其 div 溢出到另一个上。为什么会这样?
- python - 类型提示 sqlalchemy 查询结果
- google-apps-script - 根据 0 中的数字或名称选择特定工作表