【发布时间】:2018-03-12 20:08:18
【问题描述】:
我浏览了文档并正在寻找一个 Django 设置,该设置在生产中禁用系统检查(不仅仅是使它们静音)。我有一个包含 20,000 多个模型的项目,这些模型会自动生成以创建 RESTful 端点。这些系统检查需要相当长的时间:
https://docs.djangoproject.com/en/1.11/ref/checks/#models
在开发中检查系统是必要的,即使它会导致manage.py 20-30 分钟启动。但是,每当我将新版本发布到生产环境时,对生产节点的第一个 HTTP 请求也需要 20-30 分钟才能响应!我显然想避免这种情况,因为在最初的请求之后,网站速度很快。
虽然下面 cmets 中的答案引用了一个让 runserver 更快出现的解决方案,但我正在寻找生产环境的解决方案,而不是我们的开发环境。
我四处寻找像DISABLED_SYSTEM_CHECKS 这样的设置,但只遇到SILENCED_SYSTEM_CHECKS (see here),但这似乎只是使输出静音,而不是不运行需要时间的检查。这样的动物存在吗?我在生产中运行mod_wsgi。我已经看到 requires_system_checks 用于单个命令,但我正在寻找一个项目范围的解决方案。非常感谢。
【问题讨论】:
-
但是文档说 -
For performance reasons, checks are not run as part of the WSGI stack that is used in deployment.. -
是什么让您认为系统检查正在运行?你是如何启动你的生产服务器的?除非您出于某种原因使用 manage.py,否则不应运行检查。另一方面,如果你真的有 20000 个模型,那么加载这些模型的开销必然与它所花费的时间有关。
-
嗯,这很奇怪。如果我禁用带有数据端点的
urls.py的include语句,它会立即加载。mod_wsgi作为 Apache 模块运行,在发布期间,wsgi.py被重写,导致mod_wsgi重新加载。可能没有办法解决它;我试图避免将每个节点从 HA 代理中拉出,发布,用 curl 在本地命中它,然后将其放回池中。 -
这听起来像是在滥用 Django! :D
标签: python django django-models mod-wsgi django-commands