我在sync版本中使用了docker设置。不幸的是,开发服务器不会在任何代码更改时自动重新启动。这意味着我需要在每次更改时重新启动容器,这是一个麻烦。我正在使用Windows 10和Docker桌面以及WSL 2引擎。谢谢你的帮助
njthzxwz1#
Cookie-cutter django在本地docker容器中使用runserver_plus,因此更广泛地说,问题是“如何让自动重载在WSL 2上的docker中为runserver_plus工作”。runserver_plus构建于Werkzeug之上,并公开了Werkzeug内置的重载功能,虽然Werkzeug确实支持基于事件的文件系统重载,但当您从主机挂载文件路径时,这在WSL 2中不起作用。CLI文档中有一个关于这个问题的部分,链接到Werkzeug的自动重载程序文档。这些文档说明您需要stat重载程序,这是一个强力更新检查器,每隔几秒钟统计所有文件以查找更改。您可以显式启用此功能:
runserver_plus
stat
python manage.py runserver_plus --reloader-interval 1 --reloader-type stat ...
(Note 1秒的间隔可能太频繁,请减少到您认为有意义的值。)特别是在Cookie-cutter Django中,您可以在compose/local/django/start脚本中找到此命令。修改runserver_plus命令,重建映像,然后重新启动容器。最初的问题并没有问Celery,但是我会注意到cookicutter使用watchfiles来自动重新加载celery工作线程,这在docker+ WSL 2中遇到了同样的问题,并且可以通过设置WATCHFILES_FORCE_POLLING=true(cookicutter中的.envs/.local/.django)来强制使用文件统计轮询。
compose/local/django/start
watchfiles
WATCHFILES_FORCE_POLLING=true
.envs/.local/.django
1条答案
按热度按时间njthzxwz1#
Cookie-cutter django在本地docker容器中使用
runserver_plus
,因此更广泛地说,问题是“如何让自动重载在WSL 2上的docker中为runserver_plus
工作”。runserver_plus
构建于Werkzeug之上,并公开了Werkzeug内置的重载功能,虽然Werkzeug确实支持基于事件的文件系统重载,但当您从主机挂载文件路径时,这在WSL 2中不起作用。CLI文档中有一个关于这个问题的部分,链接到Werkzeug的自动重载程序文档。这些文档说明您需要
stat
重载程序,这是一个强力更新检查器,每隔几秒钟统计所有文件以查找更改。您可以显式启用此功能:(Note 1秒的间隔可能太频繁,请减少到您认为有意义的值。)
特别是在Cookie-cutter Django中,您可以在
compose/local/django/start
脚本中找到此命令。修改runserver_plus
命令,重建映像,然后重新启动容器。最初的问题并没有问Celery,但是我会注意到cookicutter使用
watchfiles
来自动重新加载celery工作线程,这在docker+ WSL 2中遇到了同样的问题,并且可以通过设置WATCHFILES_FORCE_POLLING=true
(cookicutter中的.envs/.local/.django
)来强制使用文件统计轮询。