gpt4 book ai didi

django - 如何更新使用 docker-compose 部署的 django 应用程序?现在似乎运行旧版本的代码

转载 作者:行者123 更新时间:2023-12-02 03:33:02 25 4
gpt4 key购买 nike

我有基于 cookiecutter-django 的 django web 应用程序。该堆栈建立在几个运行的容器上:django、redis、celerybeat、celery worker、celery flower、postgres、caddy。当我在 VPS 上的类似生产环境中启动应用程序时,我遇到了奇怪的行为 - 尽管从 git 存储库 checkout 新代码,django 似乎运行旧版本的代码(例如使用表单版本)。我尝试了一些操作来“强制”刷新应用程序代码:

  • docker-compose down 然后,使用 docker-compose build 重建所有容器,然后 docker-compose up

  • 与上面类似的重建,但仅适用于带有 django 的容器。

当我检查 django 容器内的代码时 - 有正确版本的代码。我用 Django Debug Toolbar 检查了应用程序 - 似乎页面没有从缓存中加载(没有从后端调用缓存,并且有一些数据库查询可能表明页面是未从缓存中加载)。我期待 django 会自动检测代码更改并重新启动运行新代码,另外可能需要重新启动解释器(这应该通过放下容器并重新构建来解决)。还有什么想法可以检查或尝试吗?删除所有容器、图像和卷有帮助,但这不是我介绍每次更新的首选方式。我通过了 Why does docker-compose build not reflect my django code changes? 的解决方案和 After docker-compose build the docker-compose up run old not updated containers但除了“用核武器摧毁一切”之外,没有一个对我有用。有没有办法“软重装”?这是 django 容器的 Dockerfile:


# Dockerfile for django container
FROM python:3.6-alpine

ENV PYTHONUNBUFFERED 1

RUN apk update \
# psycopg2 dependencies
&& apk add --virtual build-deps gcc python3-dev musl-dev \
&& apk add postgresql-dev \
# Pillow dependencies
&& apk add jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev \
# CFFI dependencies
&& apk add libffi-dev py-cffi

RUN addgroup -S django \
&& adduser -S -G django django

# Requirements are installed here to ensure they will be cached.
COPY ./requirements /requirements
RUN pip install --no-cache-dir -r /requirements/production.txt \
&& rm -rf /requirements

COPY ./compose/production/django/entrypoint /entrypoint
RUN sed -i 's/\r//' /entrypoint
RUN chmod +x /entrypoint
RUN chown django /entrypoint

COPY ./compose/production/django/start /start
RUN sed -i 's/\r//' /start
RUN chmod +x /start
RUN chown django /start

COPY ./compose/production/django/celery/worker/start /start-celeryworker
RUN sed -i 's/\r//' /start-celeryworker
RUN chmod +x /start-celeryworker
RUN chown django /start-celeryworker

COPY ./compose/production/django/celery/beat/start /start-celerybeat
RUN sed -i 's/\r//' /start-celerybeat
RUN chmod +x /start-celerybeat
RUN chown django /start-celerybeat

COPY ./compose/production/django/celery/flower/start /start-flower
RUN sed -i 's/\r//' /start-flower
RUN chmod +x /start-flower

COPY . /app

RUN chown -R django /app

USER django

WORKDIR /app

ENTRYPOINT ["/entrypoint"]

最佳答案

万一有人遇到这个问题,答案是每次推送新代码时都必须重建容器。

就跑docker-compose -f production.yml build
更新生产版本

关于django - 如何更新使用 docker-compose 部署的 django 应用程序?现在似乎运行旧版本的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51252806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com