Python Flask WSGI文件忽略用户的环境变量

2024-04-23 14:05:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经在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文件本身中设置一个环境变量。在

谁能告诉我我做错了什么吗?在


Tags: 文件方法命令web应用程序flaskwsgiapache
1条回答
网友
1楼 · 发布于 2024-04-23 14:05:11

WSGI守护进程在一个非常复杂的环境中运行,唯一设置的变量是PATH和LANG(在我的例子中是NOTIFY_SOCKET,因为Apache是由systemd启动的)。USER、SHELL和您在交互式SHELL中看到的所有其他变量都没有设置,SHELL初始化文件(.profile等)也不会运行。在

您是以USER为例,还是确实要标识流程的所有者?os.getuid()和朋友将返回uid,您可以使用类似于pwd.getpwuid(os.getuid())[0]的方式将其转换为用户名(请参见pwdos模块)。在

如果您实际想要的是访问CGI脚本中可能看到的典型服务器环境变量(例如HTTP_REFERER、REMOTE_ADDR等),那么这些变量在服务器环境中,在Flask中,这些变量可以通过Werkzeug的Request对象访问,例如from flask import Flask, request。然后您可以访问,例如request.environ['HTTP_REFERER']

相关问题 更多 >