我已经在ubuntu12.04上配置了Apache,以使用WSGI运行Python Flask web应用程序。以下是/etc/apache2/sites enabled/000 default的一部分:
<VirtualHost *>
WSGIDaemonProcess 3dkit user=3dkit group=3dkit threads=5
WSGIScriptAlias /3dkit /3dkit/kit.wsgi
WSGIPassAuthorization On
<Location /3dkit>
WSGIProcessGroup 3dkit
</Location>
...
这是/3dkit/wsgi套件公司名称:
^{pr2}$print命令失败,出现异常
KeyError: 'USER'
但是终端窗口中的命令:
sudo -u 3dkit printenv USER
按预期输出“3dkit”。在
不仅仅是环境变量。无论我如何设置环境变量,无论是在/home/3dkit/.profile中,还是在/etc/environment中,或者我能想到的任何其他方法中,它都会在WSGI文件中被忽略。我唯一能让它工作的方法就是显式地调用操作系统环境并在WSGI文件本身中设置一个环境变量。在
谁能告诉我我做错了什么吗?在
WSGI守护进程在一个非常复杂的环境中运行,唯一设置的变量是PATH和LANG(在我的例子中是NOTIFY_SOCKET,因为Apache是由systemd启动的)。USER、SHELL和您在交互式SHELL中看到的所有其他变量都没有设置,SHELL初始化文件(.profile等)也不会运行。在
您是以
USER
为例,还是确实要标识流程的所有者?os.getuid()
和朋友将返回uid,您可以使用类似于pwd.getpwuid(os.getuid())[0]
的方式将其转换为用户名(请参见pwd
和os
模块)。在如果您实际想要的是访问CGI脚本中可能看到的典型服务器环境变量(例如HTTP_REFERER、REMOTE_ADDR等),那么这些变量在服务器环境中,在Flask中,这些变量可以通过Werkzeug的Request对象访问,例如
from flask import Flask, request
。然后您可以访问,例如request.environ['HTTP_REFERER']
相关问题 更多 >
编程相关推荐