WSGI 模块和 Django 设置位置

WSGI module and Django settings locations

我将 Django 与 uWSGI 一起使用,并尝试按如下方式组织我的 Web 服务器配置文件:

/proj/
    web_config/
        docker-compose.py
        ...
        prod/
            nginx.conf
            wsgi.py
            uwsgi_params
            uwsgi.ini
            ...
    app/
        __init__.py
        settings.py

我的问题是我不知道如何从我的 WSGI 模块引用最终的 django 设置模块:

uwsgi.ini

[uwsgi]
# ...    
module = wsgi
env = DJANGO_SETTINGS_MODULE=(../../)app.settings # <- Problem here

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

#                                               v- Or problem here -v
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "(../../)app.settings")
application = get_wsgi_application()

有没有办法指向右边app.settings
没有将 wsgi.py 放入 /proj//proj/app ?

在这种情况下,要引用 django 设置,您需要做的就是从 uwsgi.ini chdir 到 /proj/ 目录。现在使用 module uWSGI 设置加载你的 wsgi.py 文件(你可以将它保存在你的 app/ 子目录中,它不包含任何设置)并将 DJANGO_SETTINGS_MODULE 设置为 app.settings,没有其他任何东西(只在wsgi.py文件中设置就足够了)。

它应该看起来像这样(如果您已将 wsgi.py 移回 app/):

uwsgi.ini:

[uwsgi]
# ...
chdir = /proj/
module = app.wsgi

wsgi.py

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")
application = get_wsgi_application()

如果您不想(出于某种原因)将 wsgi.py 文件保留在 app/ 中,您的 uwsgi.py 应该有:

[uwsgi]
# ...
chdir = /proj/
module = web_config.prod.wsgi

但是 web_configprod 应该是正确的 python 模块(在 python 2 中它们必须有 __init__.py 文件在里面)。 wsgi.py 的内容没有改变。