首页 > 解决方案 > 为什么 Django 开发服务器没有重新加载?

问题描述

我已经使用 django 开发服务器多年了。我开始他们

python manage.py runserver

当我更改任何 python 代码时,它们会很好地重新启动。

现在我继承了别人的项目进行维护,不知什么原因,我更改了Python代码,服务器没有重启。我似乎找不到任何会导致这种情况的配置选项。

我没有--noreload设置标志,这是我的证明:

$ ps -ef | grep runserver
chris     290898  250765  1 11:55 pts/6    00:00:00 python manage.py runserver
chris     290914  290898  5 11:55 pts/6    00:00:01 /home/chris/.virtualenvs/my-webapp-4cLYw-9X/bin/python manage.py runserver

有没有人遇到过这个?

更新

更多信息......同样奇怪

项目是这样设置的

src/manage.py
src/myproject (contains settings.py, urls.py, etc)
src/apps/app_one (contains models.py, tests.py, etc)
src/apps/app_two (contains models.py, tests.py, etc)

如果我编辑 src/myproject 下的任何文件,则服务器会按预期重新启动。但是如果我在 app_one 或 app_two 下编辑文件,则服务器不会重新启动。

更新#2

在它让我发疯之前复活它(可能为时已晚)。

我添加django.utils.autoreload': {'level': 'DEBUG'},settings.LOGGING,现在我可以看到 Django 正在监视我的文件,因为我可以在日志中看到:

[15/Feb/2022 10:58:14] django.utils.autoreload - 调试 [tick:392] 文件 /home/chris/OBFUSCATED/src/apps/account/models.py 以前的 mtime:1644940666.8954673,当前 mtime:1644940693.9396086

[15/Feb/2022 10:58:14] django.utils.autoreload - 调试 [notify_file_changed:366] /home/chris/OBFUSCTED/src/apps/account/models.py 通知已更改。信号结果:[(<function template_changed at 0x7efd4b77b550>, True), (<function translation_file_changed at 0x7efd48257f70>, None)]。

然而,开发服务器没有重新启动。希望这对某人比对我更有意义。

标签: django

解决方案


自动重新加载是 Django runserver 的一个特性,只在开发模式下使用。

Django 文档中阅读:

如果您使用 Linux 或 MacOS 并安装了 pywatchman 和 Watchman 服务,内核信号将用于自动重新加载服务器(而不是每秒轮询文件修改时间戳)。这为大型项目提供了更好的性能,减少了代码更改后的响应时间,更强大的更改检测,并降低了功耗。Django 支持 pywatchman 1.2.0 及更高版本。

但在生产模式下,服务器由 wsgi.py 文件运行并由诸如 gunicorn、uwsgi 等 python 服务器管理。

此功能在生产模式下不是首选,因为您可能需要更改多个文件并逐个保存它们,并且自动重新加载可能会导致生产中的错误页面。


推荐阅读