django / nginx - 在wsgi.py

时间:2016-11-03 20:45:57

标签: python django nginx django-wsgi

情况:

我们有一个 Django 应用程序,它有一个普通的wsgi.py模块,可以在运行时创建一个应用程序WSGIHandler。然后通过 Nginx 提供应用程序。

问题:

wsgi.py执行时,应该有一些启动代码执行一次。具体代码:

  • 在 django初始化之前,解释器进程的某些初始化是
  • django初始化之后 django.setup()被调用)

当前解决方案:

我现在实现它的方式是使用上下文管理器(参见下面的代码)。乍一看看起来有点尴尬,但它的表现与预期一致。

问题:

  • Nginx 何时开始向WSGIHandler提供请求(由模块变量application指向)?
  • 它会在application完成之前开始向__exit__()提供请求数据吗?
  • 我的(未受过教育的)猜测, Nginx 以脚本式从上到下执行wsgi.py一次,之后'完成后,访问名为application的模块变量。谁知道更好?
  • 这个设置对你来说如何? 有效吗?非正统但技术上有效吗?问题

wsgi.cfg (伪代码)

[uwsgi]
module = wsgi:application

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_test.settings")

from startup import StartupContext

with StartupContext():
    application = get_wsgi_application()

startup.py

class StartupContext():

    def __enter__(self):
        """Run before django.setup() is called."""
        setup_logging_for_python_process()

    def __exit__(self, exc_type, exc_val, exc_tb):
        """Run after django.setup() is called."""
        call_command(["showmigrations", "--plan"])

0 个答案:

没有答案