- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从 Apache vhost 配置文件中读取环境变量并将它们存储到 Django 设置中。
在更新到 Django 1.7 之前一切都很好,但现在它坏了。
当我调用时,问题似乎出在我的 wsgi.py 脚本中
_application = get_wsgi_application()
因为它在设置环境变量之前读取配置文件。
在 Django 1.7 中还有其他方法吗?
在我的/etc/apache2/sites-enabled/mysyte.conf 中我有:
<VirtualHost *:80>
...
SetEnv SECRET_KEY ...
SetEnv EMAIL_HOST ...
SetEnv EMAIL_HOST_PASSWORD ...
SetEnv EMAIL_HOST_USER ...
SetEnv EMAIL_PORT 25
...
在我的 wsgi.py 中:
import os
from os.path import abspath, dirname
from sys import path
SITE_ROOT = dirname(dirname(abspath(__file__)))
path.append(SITE_ROOT)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "locacle.settings.production")
_application = get_wsgi_application()
def application(environ, start_response):
for key, value in environ.items():
if isinstance(environ[key], str):
os.environ[key] = environ[key]
return _application(environ, start_response)
在我的 settings.py 中我有:
from os import environ
from base import *
def get_env_setting(setting):
""" Get the environment setting or return exception """
try:
return environ[setting]
except KeyError:
error_msg = "Set the %s env variable" % setting
raise ImproperlyConfigured(error_msg)
EMAIL_HOST = get_env_setting('EMAIL_HOST')
...
这是日志文件报告的内容:
...
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/www/.../settings/production.py", line 34, in <module>
EMAIL_HOST = get_env_setting('EMAIL_HOST')
File "/home/www/...settings/production.py", line 21, in get_env_setting
raise ImproperlyConfigured(error_msg)
ImproperlyConfigured: Set the EMAIL_HOST env variable
...
最佳答案
恐怕你在这里尝试做的事情本质上是脆弱的,只是幸运地在以前的 Django 版本上工作,并且不会与 Django 1.7 或任何 future 版本的 Django 一起工作。 (更新:它还会使您可能容易受到“shellshock”bash 错误的攻击,而 WSGI 通常不会。)
基本问题是 WSGI 环境仅在每个请求的基础上可用,但您正在尝试基于它为 Django 进程设置全局配置。这是低效的并且在概念上是错误的(为什么每次请求进入时你都要一次又一次地重新设置操作系统环境变量?如果不同的请求有不同的 WSGI 环境怎么办?),并且它只有在 Django 等待 self 配置,直到第一个请求到达。
但是之前版本Django的启动顺序的不可预测的时间和顺序导致了问题。例如,当在本地开发中使用 runserver 时,由于验证检查,Django 会急切地配置自己,但在生产环境下它只会懒惰地配置自己(你所依赖的),这意味着有时导入会以不同的顺序发生并且在 runserver 下无法重现的生产中会出现循环导入。
Django 1.7 包含一个改进的启动序列以解决这些问题,使启动序列在开发和生产之间可预测和一致,并允许用户显式注册代码以在启动时运行(通过 AppConfig.ready( )
)。这样做的一个副作用是设置是在您的进程启动时配置的(具体来说,在 get_wsgi_application()
中调用 django.setup()
),而不是等到第一个请求进来了。
如果你只在这台服务器上运行一个 Django 站点,我会简单地将你的配置移动到正常的环境变量而不是 Apache 配置中的 SetEnv
,并避免整个问题。
如果您正在运行多个需要通过单个 Apache 服务器进行不同配置的 Django 站点,那将无法正常工作。在这种情况下,也许更熟悉 Apache 和 mod_wsgi
的人可以就如何以可靠的方式将环境变量从 Apache 配置传递到 Django 进程提供建议;我个人发现 mod_wsgi
的过程模型(实际上是过程模型,因为有多个过程模型取决于您如何配置它)在尝试通过一个运行多个独立配置的站点时令人困惑且容易出错服务器。我发现使用像 gunicorn 或 uwsgi 这样的专用 WSGI 服务器并使用 Apache(或 nginx)代理它更简单。然后使用单独的操作系统环境运行多个 gunicorn/uwsgi 进程很简单。
关于django - 如何从 Apache 读取环境变量从 Django 1.6.5 更新到 1.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784462/
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to nest OR statements in JavaScript? 有没有办法做到这一点:
在 JavaScript 中有没有办法让一个变量总是等于一个变量?喜欢var1 = var2但是当var2更新,也是var1 . 例子 var var1 = document.getElementBy
我正在努力理解这代表什么 var1 = var2 == var3 我的猜测是这等同于: if (var2 == var3): var1 = var2 最佳答案 赋值 var1 = var2
这个问题已经有答案了: What does the PHP error message "Notice: Use of undefined constant" mean? (2 个回答) 已关闭 8
我在临时表中有几条记录,我想从每条记录中获取一个值并将其添加到一个变量中,例如 color | caption -------------------------------- re
如何将字符串转为变量(字符串变量--> $variable)? 或者用逗号分隔的变量列表然后转换为实际变量。 我有 2 个文件: 列名文件 行文件 我需要根据字符串匹配行文件中的整行,并根据列名文件命
我有一个我无法解决的基本 php 问题,我也想了解为什么! $upperValueCB = 10; $passNodeMatrixSource = 'CB'; $topValue= '$uppe
这可能吗? php $variable = $variable1 || $variable2? 如果 $variable1 为空则使用 $variable2 是否存在类似的东西? 最佳答案 PHP 5
在 Perl 5.20 中,for 循环似乎能够修改模块作用域的变量,但不能修改父作用域中的词法变量。 #!/usr/bin/env perl use strict; use warnings; ou
为什么这不起作用: var variable; variable = variable.concat(variable2); $('#lunk').append(variable) 我无法弄清楚这一点
根据我的理解,在32位机器上,指针的sizeof是32位(4字节),而在64位机器上,它是8字节。无论它们指向什么数据类型,它们都有固定的大小。我的计算机在 64 位上运行,但是当我打印包含 * 的大
例如: int a = 10; a += 1.5; 这运行得很完美,但是 a = a+1.5; 此作业表示类型不匹配:无法从 double 转换为 int。所以我的问题是:+= 运算符 和= 运算符
您好,我写了这个 MySQL 存储过程,但我一直收到这个语法错误 #1064 - You have an error in your SQL syntax; check the manual that
我试图在我的场景中显示特定的奖牌,这取决于你的高分是基于关卡的目标。 // Get Medal Colour if levelHighscore goalScore { sc
我必须维护相当古老的 Visual C++ 源代码的大型代码库。我发现代码如下: bIsOk = !!m_ptr->isOpen(some Parameters) bIsOk的数据类型是bool,is
我有一个从 MySQL 数据库中提取的动态产品列表。在 list 上有一个立即联系 按钮,我正在使用一个 jquery Modal 脚本,它会弹出一个表单。 我的问题是尝试将产品信息变量传递给该弹出窗
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What is the difference between (type)value and type(va
jQuery Core Style Guidelines建议两种不同的方法来检查变量是否已定义。 全局变量:typeof variable === "undefined" 局部变量:variable
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: “Variable” Variables in Javascript? 我想肯定有一种方法可以在 JavaScrip
在语句中使用多重赋值有什么优点或缺点吗?在简单的例子中 var1 = var2 = true; 赋值是从右到左的(我相信 C# 中的所有赋值都是如此,而且可能是 Java,尽管我没有检查后者)。但是,
我是一名优秀的程序员,十分优秀!