gpt4 book ai didi

django - 通过 mod_wsgi 从 apache 传递环境变量以在 django 1.11 设置中使用

转载 作者:行者123 更新时间:2023-12-02 17:12:29 27 4
gpt4 key购买 nike

找到了这个问题的几个版本,比如Django get environment variables from apache ,但是到目前为止我发现的建议似乎不适用于最新的 LTS django (1.11)。

我有一个 apache 配置,其中包含许多环境变量,不限于数据库的连接凭据。我使用它使我的代码在开发/生产等之间可移植。

我的 apache conf 只是使用 SetEnv 来传递一些变量。

我尝试了两种不同风格的方法来使用这些变量,两者似乎都遇到了同样的问题;它需要在我们写入环境之前读取设置文件,而设置文件需要来自环境的值。

我的两个变体是;

import os
import django
from django.core.handlers.wsgi import WSGIHandler

from django.core.wsgi import get_wsgi_application

_application = get_wsgi_application()

def application(environ, start_response):
for key in [keys...]:
if environ.get(key):
os.environ[key] = environ.get(key)
return _application(environ, start_response)

import os
import django
from django.core.handlers.wsgi import WSGIHandler

class WSGIEnvironment(WSGIHandler):
def __call__(self, environ, start_response):
for key in [keys...]:
if environ.has_key(key):
print "Key: %s = %s" % (key,environ[key])
os.environ[key] = environ[key]
return super(WSGIEnvironment, self).__call__(environ, start_response)

os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'apiClient.settings')
django.setup(set_prefix=False)
application = WSGIEnvironment()

无论哪种方式,我都试图将设置中的值用作;

KEY = "thing"

if os.environ.has_key("KEY"):
KEY = os.environ["KEY"]

最佳答案

您不能使用 SetEnv,因为在处理第一个请求之前会评估设置文件。根据每个请求 WSGI 环境值设置环境变量始终不是一个好主意,并且可能会导致问题,因此您无论如何都不应该这样做。

结果是您无法从 Apache 配置文件设置环境变量。从 WSGI 脚本文件中设置它们。如果它们是不应添加到 Git 存储库的东西,请在特定主机上使用某种格式的值创建一个文件,并让 WSGI 脚本文件从本地主机读取该文件以在首次加载时和任何加载之前设置它们执行 Django 代码。

关于django - 通过 mod_wsgi 从 apache 传递环境变量以在 django 1.11 设置中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48340719/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com