Django 热重载仅适用于某些文件
Django hot reload only working on certain files
我遇到了一个奇怪的问题,即并非所有文件编辑都被 Django 的热重载程序拾取。
我有这样的结构:
/
app/ ... apps in here.
config/settings.py
manage.py
现在,对 config/settings.py 或 manage.py 的任何更改都将导致 django 运行服务器重新加载。
但是对 app/... 中文件的任何更改都不会触发重新加载 - 我必须去 manage.py 添加一个换行符并保存(非常烦人)。
知道为什么会这样吗?
起初我以为是docker的东西,它只是在base dir中获取文件,但后来更改为config/settings.py也触发了重新加载,所以很明显可以看得更深
编辑:添加信息
Django 3.2,PyCharm,MacOS - 是的,所有应用程序都在 INSTALLED_APPS
我有另一个项目具有完全相同的结构并且出于某种原因它有效...我真的很困惑。
编辑添加 dc 和 dockerfile
FROM python:3.8-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY ./requirements /requirements
ARG pip_requirement_file
RUN apt-get update && apt-get install -y libjpeg62-turbo-dev zlib1g-dev gcc ca-certificates gcc postgresql-client sed xmlsec1 pax-utils && apt-get clean
RUN pip install --no-cache-dir -r /requirements/$pip_requirement_file \
&& find /usr/local \
\( -type d -a -name test -o -name tests \) \
-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
-exec rm -rf '{}' +
# Copy requirements and install local one
RUN rm -rf /requirements
COPY ./compose/django/entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r//' /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./compose/django/start-server.sh /start-server.sh
RUN sed -i 's/\r//' /start-server.sh
RUN chmod +x /start-server.sh
# Very specifically copy the files we want to avoid bloating the image.
COPY ./manage.py /app/
COPY ./app/ /app/app/
COPY ./admin_static/ /app/admin_static/
COPY ./config/ /app/config/
COPY ./database/ /app/database/
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/start-server.sh"]
docker撰写
services:
django:
container_name: django
build:
context: .
dockerfile: ./compose/django/Dockerfile
args:
pip_requirement_file: local.txt
depends_on:
- postgres
ports:
- "8000:8000"
links:
- postgres:postgres
volumes:
- .:/app
env_file: .env
我不是 100% 确定问题是什么,但是提供这个答案有几个你可以尝试的事情:
有 reports that Pycharm will sometimes cause problems if it has been configured not to update the timestamps of files when saving them (there is a Preserve files timestamps 设置来控制它)您可以尝试切换。验证这是否是问题的一种简单方法是尝试使用不同的编辑器编辑文件(或 touch
文件)并查看是否触发重新加载 - 如果触发重新加载,则问题是 PyCharm .
请注意,如果文件时间戳不更改,默认 StatReloader
将不起作用。
尝试安装 pywatchman
和 Watchman 服务,如前所述 in the documentation,它提供了一种比 StatReloader
简单轮询更有效的方式来监视变化每秒更改所有文件 - 如果它是一个大型项目,可能是 StatReloader
花费太长时间才能发现更改。
感谢大家帮助我解决这个困扰我的难题。
我决定剥离两个项目(旧的和新的),看看为什么旧的有效而新的无效。
这就是不同之处。
在旧项目的 config/init.py 中,存在这一行:
from __future__ import absolute_import, unicode_literals
在新项目中,缺少这个。
当我添加这个时,热重新加载开始对 app/* 中的所有文件起作用?????
这是有效的,但老实说,我不知道为什么会有不同。
我遇到了一个奇怪的问题,即并非所有文件编辑都被 Django 的热重载程序拾取。
我有这样的结构:
/
app/ ... apps in here.
config/settings.py
manage.py
现在,对 config/settings.py 或 manage.py 的任何更改都将导致 django 运行服务器重新加载。
但是对 app/... 中文件的任何更改都不会触发重新加载 - 我必须去 manage.py 添加一个换行符并保存(非常烦人)。
知道为什么会这样吗?
起初我以为是docker的东西,它只是在base dir中获取文件,但后来更改为config/settings.py也触发了重新加载,所以很明显可以看得更深
编辑:添加信息
Django 3.2,PyCharm,MacOS - 是的,所有应用程序都在 INSTALLED_APPS
我有另一个项目具有完全相同的结构并且出于某种原因它有效...我真的很困惑。
编辑添加 dc 和 dockerfile
FROM python:3.8-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY ./requirements /requirements
ARG pip_requirement_file
RUN apt-get update && apt-get install -y libjpeg62-turbo-dev zlib1g-dev gcc ca-certificates gcc postgresql-client sed xmlsec1 pax-utils && apt-get clean
RUN pip install --no-cache-dir -r /requirements/$pip_requirement_file \
&& find /usr/local \
\( -type d -a -name test -o -name tests \) \
-o \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
-exec rm -rf '{}' +
# Copy requirements and install local one
RUN rm -rf /requirements
COPY ./compose/django/entrypoint.sh /entrypoint.sh
RUN sed -i 's/\r//' /entrypoint.sh
RUN chmod +x /entrypoint.sh
COPY ./compose/django/start-server.sh /start-server.sh
RUN sed -i 's/\r//' /start-server.sh
RUN chmod +x /start-server.sh
# Very specifically copy the files we want to avoid bloating the image.
COPY ./manage.py /app/
COPY ./app/ /app/app/
COPY ./admin_static/ /app/admin_static/
COPY ./config/ /app/config/
COPY ./database/ /app/database/
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/start-server.sh"]
docker撰写
services:
django:
container_name: django
build:
context: .
dockerfile: ./compose/django/Dockerfile
args:
pip_requirement_file: local.txt
depends_on:
- postgres
ports:
- "8000:8000"
links:
- postgres:postgres
volumes:
- .:/app
env_file: .env
我不是 100% 确定问题是什么,但是提供这个答案有几个你可以尝试的事情:
有 reports that Pycharm will sometimes cause problems if it has been configured not to update the timestamps of files when saving them (there is a Preserve files timestamps 设置来控制它)您可以尝试切换。验证这是否是问题的一种简单方法是尝试使用不同的编辑器编辑文件(或
touch
文件)并查看是否触发重新加载 - 如果触发重新加载,则问题是 PyCharm .请注意,如果文件时间戳不更改,默认
StatReloader
将不起作用。尝试安装
pywatchman
和 Watchman 服务,如前所述 in the documentation,它提供了一种比StatReloader
简单轮询更有效的方式来监视变化每秒更改所有文件 - 如果它是一个大型项目,可能是StatReloader
花费太长时间才能发现更改。
感谢大家帮助我解决这个困扰我的难题。
我决定剥离两个项目(旧的和新的),看看为什么旧的有效而新的无效。
这就是不同之处。
在旧项目的 config/init.py 中,存在这一行:
from __future__ import absolute_import, unicode_literals
在新项目中,缺少这个。
当我添加这个时,热重新加载开始对 app/* 中的所有文件起作用?????
这是有效的,但老实说,我不知道为什么会有不同。