WSGI / HTTPD虚拟主机中的SetEnv无法正常工作?

时间:2018-03-13 18:50:10

标签: python-3.x apache environment-variables mod-wsgi

我正在尝试使用mod_wsgi 4.6.2在httpd 2.4中创建一个python flask应用程序(您可以在此处找到详细信息配置 - my previous question)。无论如何,当我试图将一些配置信息传递给WSGI文件或python文件时。它没有成功。我以为我可以因为this article而这样做。

<VirtualHost *:443>
........
    WSGIDaemonProcess abcd_server user=python_user group=python_user threads=5 python-home="/var/www/m.abcd.com/venv"
    WSGIProcessGroup abcd_server
    WSGIScriptAlias / "/var/www/m.abcd.com/python-src/wsgi-src/abcd_server.wsgi"
    SetEnv "P2SERVER_SRC" "/var/www/m.abcd.com/python-src/src"
    SetEnv "P2SERVER_APP_CFG" "/var/www/m.abcd.com/conf/abcd_conf.yaml"
........
</VirtualHost>

我无法使用&#34; os.environ [&#39; P2SERVER_SRC&#39;]&#34;检索P2SERVER_SRC。在wsgi文件中,无法使用&#34; os.getenv&#34;在python文件中检索P2SERVER_APP_CFG API。当然,我可以在wsgi文件中使用硬编码值绕过这些问题。但我真的很想让SetEnv工作。

1 个答案:

答案 0 :(得分:0)

那篇文章非常清楚地说明你要做的事情是行不通的。

  

请注意,WSGI环境会在每次请求时传递给   应用程序在应用程序对象的'environ'参数中。这个   环境与过程环境完全无关   保存在'os.environ'中。 SetEnv指令对此没有影响   'os.environ'并没有办法通过Apache配置   指令,以影响流程环境中的内容。

您需要通过WSGI脚本文件设置它们。这并不意味着值必须在WSGI脚本文件中。在不受版本控制的目录中的特定主机上创建文件,WSGI脚本文件以某种方式读取/处理以获取要设置的环境变量的键/值。

如果您实际上并不需要它们是流程范围的环境变量,请从传递给WSGI应用程序的每个问题environ字典中获取它们。对于Flask而言,这意味着访问request.environ