【问题标题】:cannot get environment variables set in Flask application无法在 Flask 应用程序中设置环境变量
【发布时间】:2017-03-31 07:44:08
【问题描述】:

我尝试在 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 日志来验证这一点。

任何关于其工作原理的想法将不胜感激。

谢谢

【问题讨论】:

  • 是否有可能在设置环境变量之前就启动了 Apache,所以所有从 Apache 派生的 python 工作人员只能获取启动 Apache 时定义的环境变量?
  • 遇到了这个问题,因为我遇到了类似的问题。对我来说,解决方案是重新启动我的终端,以便加载新变量。

标签: apache flask centos


【解决方案1】:

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

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

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

>>> value

【讨论】:

    【解决方案2】:

    我有一个非常相似的问题,因为我使用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。 希望对你有帮助。

    【讨论】:

      【解决方案3】:

      也许您可以使用 Apache 指令 PassEnv,正如 Apache 官方网站上提到的 here 记录如何使用环境变量。

      影响 Apache HTTP 服务器的环境变量有两种

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

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

      虽然这些变量被称为环境变量,但它们是 与底层控制的环境变量不一样 操作系统。相反,这些变量在中存储和操作 内部 Apache 结构。它们只成为实际的操作系统环境 提供给 CGI 脚本和服务器端包含脚本时的变量。 如果你想操作服务器所在的操作系统环境 本身运行,你必须使用标准的环境操纵机制 由您的操作系统外壳提供。

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 2020-10-30
        • 2012-10-03
        • 2012-06-08
        • 2017-11-14
        • 2016-10-08
        相关资源
        最近更新 更多