【问题标题】:Unable to get environment variable无法获取环境变量
【发布时间】:2015-07-12 02:41:42
【问题描述】:

在我尝试设置的__init__.py 文件中:

import os
app.config['SECRET_KEY'] = os.environ['MY_KEY']

但我得到了错误:

raise KeyError(key)
KeyError: 'MY_KEY'

当我运行printenv 时,变量MY_KEY 存在。

IDLE我也试过运行:

import os
print os.environ['MY_KEY']

我得到了正确的输出。

我在/etc/profile 中设置MY_KEY 使用:

export MY_KEY="1234example_secret_key"

在对profile 文件进行更改后,我对我的计算机进行了restart

有人知道问题出在哪里吗?

感谢您的帮助。

【问题讨论】:

  • 你是如何运行你的烧瓶应用程序的?并非所有调用都会评估 /etc/profile。例如,系统的 apache 安装可能不会,具体取决于设置。
  • @pvg 我正在使用Nginx/Gunicorn。我使用supervisor 运行应用程序。
  • stackoverflow.com/questions/19054008/… 另一种可能更简单的方法是将这些信息放在 python 文件中并导入。远离源代码控制并让您的部署脚本生成它。使用不同的名称将模板版本置于源代码管理之下。因此,如果您有带有参数的 app_config.py,请维护一个 app_config_sample.py 用于文档目的。如果您想花哨,请让您的构建脚本生成 app_config 样本。
  • @Giri 您可以使用环境配置参数 environment = MY_KEY="ABCD",MY_KEY2="EFG" 将环境变量传递给主管进程。
  • @Giri 另一个选择是不使用 Flask 的默认加密 cookie 进行会话,而是使用像 Beaker 这样的东西。没有奇怪的密钥,没有向客户端来回发送敏感数据,整个事情就消失了。

标签: python flask environment-variables


【解决方案1】:

如果您在主管和/或 gunicorn 下运行您的进程(判断但您确实是),您可以使用主管环境配置参数。

[program:my_app]
...
environment = MY_KEY="ABCD",MY_KEY2="EFG"

您也可以使用 gunicorn --env 标志或 env 配置文件参数。

gunicorn -b 127.0.0.1:8000 --env MY_KEY=ABCD test:app

第二个选项的缺点是任何有权访问您机器的人都可以看到您的密钥。

最好的方法是使用 app.config.from_envvar 函数并将您的配置存储到机器特定的配置设置位置(这可能在加密文件系统上)。在这种情况下,您的代码将如下所示:

app = Flask(__name__)
...
app.config.from_envvar('MACHINE_SPECIFIC_SETTINGS')

您的 MACHINE_SPECIFIC_SETTINGS 环境变量可以指向具有 MY_KEY 值的文件。

MACHINE_SPECIFIC_SETTINGS=/path/to/config.py  

【讨论】:

  • 谢谢@Boris,我会试试这个。如果我使用您的最终建议,我应该如何/在哪里设置 MACHINE_SPECIFIC_SETTINGS 变量?
  • @Giri 您可以使用主管环境配置参数或 gunicorn --env 标志。
猜你喜欢
  • 2021-10-19
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2019-11-21
相关资源
最近更新 更多