Горячая перезагрузка разработки Django в Docker задерживается
Горячая перезагрузка задерживается на 1 цикл.
Так, например, если у меня print("Hi")
, то ничего не меняется, но затем, если у меня print("Hello")
, то на экране появляется print("Hi")
.
Если у меня есть третья команда print("Goodbye")
, то появляется print("Hello")
.
Таким образом, всегда происходит задержка на цикл.
Как я могу исправить приведенный ниже код, чтобы обновление не задерживалось на 1 цикл, а происходило мгновенно.
Вот мой dockerfile.
###########
# BUILDER #
###########
# pull official base image
FROM python:3.9.9-slim-bullseye as builder
# set work directory
WORKDIR /usr/src/app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt
#########
# FINAL #
#########
# pull official base image
FROM python:3.9.9-slim-bullseye
# installing netcat (nc) since we are using that to listen to postgres server in entrypoint.sh
RUN apt-get update && apt-get install -y --no-install-recommends netcat && \
apt-get install ffmpeg libsm6 libxext6 -y &&\
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# install dependencies
COPY --from=builder /usr/src/app/wheels /wheels
COPY --from=builder /usr/src/app/requirements.txt .
RUN pip install --no-cache /wheels/*
# set work directory
WORKDIR /usr/src/app
# copy our django project
ADD ./backend_apps .
# run entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]
Вот часть docker-compose.
services:
web:
build: ./backend
volumes:
- django_static_volume:/usr/src/app/static
- media:/usr/src/app/media
- ./backend/backend_apps:/usr/src/app
expose:
- 8000
command: python manage.py runserver 0.0.0.0:8000
Сценарий точки входа
#!/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 makemigrations --no-input
python manage.py migrate
exec "$@"
Я отключил celery и redis, но проблема все еще сохраняется. Я использую nginx для обслуживания django.