无法获取Flask应用程序中设置的环境变量

时间:2016-11-16 22:27:19

标签: apache flask centos

我尝试在CentOS中将敏感信息设置为环境变量,并将它们传递给主文件中使用的Flask配置文件,即 init .py。但它没有用。 Flask应用程序在Apache下运行。

我首先以root用户身份编辑/ etc / environment

MAIL_USERNAME="abcde@abc.com"

然后注销,再次登录 然后通过运行

验证MAIL_USERNAME是否已设置
echo $MAIL_USERNAME

这很好用

在configuration.py中,这就是我设置MAIL_USERNAME的方式。

MAIL_USERNAME = os.environ.get('MAIL_USERNAME')

用于测试目的, 我打印出MAIL_USERNAME

in __init__.py
print(MAIL_USERNAME)

然后从终端,如果我跑

python3.4 __init__.py

打印出正确的MAIL_USERNAME

但是,如果我在网络浏览器上测试过,那么MAIL_USERNAME就没有设置好。它显示无。我通过查看Apache日志来验证这一点。

任何关于如何运作的想法都会非常感激。

由于

3 个答案:

答案 0 :(得分:1)

使用CLI,根据需要设置环境变量。在Linux和macOS上,这是通过export KEY=value完成的。

之后,环境变量KEY将通过os.environ.get('KEY')用于您的Python脚本或Flask应用程序,如下所示:

import os
print os.environ.get('key')

>>> value

答案 1 :(得分:0)

我遇到了一个非常类似的问题,因为我使用PyCharm终端来运行烧瓶。描述并解决了类似的问题here。 我的解决方案是切换到常规cmd(我在Windows 10上工作)并在那里运行所有内容:

>> set MAIL_USERNAME='bla@example.com'
... (other env variables sets)
>> py manage.py runserver (I run my flask app through a manage script)

我可以使用我的烧瓶应用程序成功发送电子邮件 - 应用程序中使用的所有环境变量都已正确读取。

在Linux上,您可以使用export代替set。 我希望它有所帮助。

答案 2 :(得分:0)

也许您可以使用Apache官方网络上记录here的Apache指令PassEnv,该指南记录了如何使用环境变量。

  

两种环境变量会影响Apache HTTP Server。

     

首先,存在由底层控制的环境变量   操作系统。这些是在服务器启动之前设置的。它们可以用于   扩展配置文件,可以选择将其传递给CGI脚本   和SSI使用 PassEnv 指令。

     

第二,Apache HTTP Server提供了一种用于存储信息的机制   在也称为环境变量的命名变量中。这个信息   可用于控制各种操作,例如日志记录或访问控制。   变量还用作与外部程序进行通信的机制   例如CGI脚本。本文档讨论了不同的操作方式和   使用这些变量。

     

尽管这些变量称为环境变量,但它们是   与底层控制的环境变量不同   操作系统。相反,这些变量是在中存储和处理的   内部Apache结构。它们仅成为实际的操作系统环境   变量提供给CGI脚本和Server Side Include脚本时。   如果您希望操纵服务器所在的操作系统环境   本身运行,必须使用标准的环境操纵机制   由您的操作系统外壳程序提供。

我将上面引用的某些文本加粗,以使事情更清楚,也可能更容易解释。

希望这会有所帮助。