【问题标题】:Set DJANGO_SETTINGS_MODULE through uwsgi通过 uwsgi 设置 DJANGO_SETTINGS_MODULE
【发布时间】:2015-10-25 18:34:45
【问题描述】:

我正在尝试找到拆分 django 设置的最佳方式,并为 dev 和 prod 提供不同的设置文件。

我的 wsgi 文件:

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

在我的 uwsgi.ini 文件中我有这个:

env = DJANGO_SETTINGS_MODULE=project.settings.local
wsgi-file = project/wsgi.py

但是 uwsgi.ini 文件中的 env 没有传递给 wsgi。如果我在 wsgi 文件中打印 os.environ,则未设置 DJANGO_SETTINGS_MODULE。

有什么想法吗?

【问题讨论】:

  • 为什么不在wsgi.py中设置呢?
  • 因为那时我需要不同的 wsgi 文件用于开发、生产和登台
  • 语法看起来是正确的,所以没有足够的信息来猜测可能出了什么问题。尝试将所有配置文件隔离到一个可重复的测试用例中。

标签: django uwsgi


【解决方案1】:

我喜欢在 wsgi.py 中做这样的事情:

import os
import socket

socket_name = socket.gethostname()
if "stage" in socket_name:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.staging')
elif "prod" in socket_name:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.production')
else:
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.local')

application = get_wsgi_application()

检测您是在 staging、prod 还是 local 的方法可以是任何您想要的,但是 os.environ.setdefault 命令似乎可以完成您希望做的事情。

【讨论】:

    【解决方案2】:

    我的解决方案是在 bin/activate 文件中设置 DJANGO_SETTINGS_MODULE。我在导出 PATH 之后添加了它,如下所示:

    export PATH
    export DJANGO_SETTINGS_MODULE='project.settings.local'
    

    您应该在项目环境文件夹中找到您的 bin 文件夹。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 2011-11-27
      • 2012-10-02
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多