【发布时间】:2021-02-19 09:35:04
【问题描述】:
我正在开发一个 django Web 应用程序,用户可以在应用程序本身中通过 UI 使用 ace editor 修改某些类的代码(想象成 gitlab/github,您可以在其中在线更改代码)。但是这些课程有时是由 django 和 celery worker 运行的。
保存代码更改后,由于 gunicorn,django 不会选择更改,但可以正常使用 celery,因为它的过程不同。 (使用 runserver 在本地运行它可以正常工作,并且 django 和 celery 都会选择更改)。
有没有办法让 gunicorn 反映包含类的某个目录的更改而不重新加载整个应用程序?如果需要重新装载,有没有办法在不停机的情况下一个接一个地重新装载 gunicorn 的工人?
gunicron 命令:
/usr/local/bin/gunicorn config.wsgi --bind 0.0.0.0:5000 --chdir=/app
wsgi 配置文件:
import os
import sys
from django.core.wsgi import get_wsgi_application
app_path = os.path.abspath(os.path.join(
os.path.dirname(os.path.abspath(__file__)), os.pardir))
sys.path.append(os.path.join(app_path, 'an_application'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")
application = get_wsgi_application()
【问题讨论】:
-
这应该是一个 200+ 赏金问题。
-
看看这个帖子superuser.com/questions/181517/…它可能对你有用
-
事实上
gunicorn有一个选项--reload(@see docs.gunicorn.org/en/latest/settings.html#debugging) 可以重新加载代码更改但是它不是用于生产环境。 -
@Coderji 看看这个类似的项目djangosites.org/s/django-visual-herokuapp-com,但不幸的是它不会在代码更改时自动重新加载项目。无论如何,它可能会帮助您改进您的项目
-
您可以将代码块写入文件,然后使用 python 的
eval()在运行时运行它。这不是一个真正安全的操作,但应该可以完成这项工作。