2015-08-13 32 views
2

越来越URL所以我要调用的基础上,从WSGI文件用户的URL(或至少用户的域)Python代码不同的实例。我们正在运行Apache 2.x + Python + Django堆栈。从WSGI脚本

在WSGI脚本(herehere)中可以访问的os.environ字典中应该有类似'SERVER_NAME'或'HTTP_HOST'的键。然而,这关键是失踪,这里是如何os.environ.__dict__看起来当一切都正常工作,如:

{'data': {'LANG': 'C', 'APACHE_LOCK_DIR': 'xxx', 'TZ': 'US/Pacific', 'DJANGO_SETTINGS_MODULE': 'xxx', 'APACHE_RUN_USER': 'xxx', 'PWD': 'xxx', 'APACHE_PID_FILE': 'xxx', 'CELERY_LOADER': 'django', 'APACHE_RUN_DIR': 'xxx', 'APACHE_LOG_DIR': 'xxx', 'APACHE_RUN_GROUP': 'xxx', 'HOME': 'xxx', 'PATH': 'xxx'}} 

域/ URL是一个非常基本的信息,我很惊讶,我没能找到它。

更新:我已经在不同的方法(使用Apache配置,而不是WSGI脚本)结算。这似乎解决了缺少WSGI环境变量的问题。感谢您的回应!

+0

你的链接都不显示使用'os.environ'。 –

+0

好点。当我尝试访问WSGI脚本中的'environ'时,Apache抛出一个错误:“NameError:name'environ'未定义” – bushman

+0

您是否在WSGI处理程序中尝试这样做? –

回答

3

您在将os.environ字典显示当前系统环境变量与作为参数传递给wsgi应用程序的environ混淆。路径在后者中。

但是,由于您使用的Django,这些信息都是通过request对象提供。

+0

谢谢丹尼尔。当我尝试直接在WSGI脚本中访问'environ'时,Apache将这个错误写入日志:“NameError:name'environ'未定义”。我们是否应该能够通过正确的服务器配置从WSGI访问它? [请注意,我们的目标是在调用Django之前建立子域名] – bushman

+0

也许你应该显示你正在尝试执行此操作的位置? environ不是全局的,它是为每个请求传递给wsgi应用程序对象的显式参数。对于Django,该对象在wsgi.py中实例化,它从django.core.wsgi.get_wsgi_application中获取。你到底在做什么? –

+0

这就解释了它,Django的'request'对象确实填充了所有这些字段。我们希望通过为每个子域加载不同的Python代码来为用户提供路由。这种多态性可以在代码调用级别(我们试图做的 - 一台服务器,多个Python进程)和代码级别(我们想要避免的)在虚拟机级别(使用多个虚拟机,每个子域一个)通过保持Python/Django代码不知道子域)。正如Ignacio暗示的那样,我已经开始朝着这[英]这个方向前进(http://stackoverflow.com/questions/13463687/adding-parameters-to-the-wsgi-script-alias)。 – bushman

相关问题