django - 为什么 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
有没有人遇到过这个?
- 蟒蛇 3.9.5
- Django 3.2.6
- 使用 pipenv 管理我的虚拟环境
更新
更多信息......同样奇怪
项目是这样设置的
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 runserver 的一个特性,只在开发模式下使用。
在Django 文档中阅读:
如果您使用 Linux 或 MacOS 并安装了 pywatchman 和 Watchman 服务,内核信号将用于自动重新加载服务器(而不是每秒轮询文件修改时间戳)。这为大型项目提供了更好的性能,减少了代码更改后的响应时间,更强大的更改检测,并降低了功耗。Django 支持 pywatchman 1.2.0 及更高版本。
但在生产模式下,服务器由 wsgi.py 文件运行并由诸如 gunicorn、uwsgi 等 python 服务器管理。
此功能在生产模式下不是首选,因为您可能需要更改多个文件并逐个保存它们,并且自动重新加载可能会导致生产中的错误页面。
推荐阅读
- microsoft-graph-api - 返回对多个 Teams 聊天消息的回复
- javascript - 如何在到达数组中的最后一个元素时无法按下按钮
- javascript - 将数组传递给 JS 脚本
- angular - 离子科尔多瓦不可用
- system-verilog - 在系统 verilog 中使用 $past 宏来获得高信号
- ios - SwiftUI 动画和随后的反向动画到原始状态
- aws-lambda - 如何使用无服务器数据狗插件监控 HTTP 状态代码
- python - 在 Python 中提高 BFS 的性能
- openshift - Windows Jenkins Slave 无法连接到托管在 Openshift 实例上的主服务器
- python - Pyspark 从列表中创建组合