如何使用flask应用程序中的heroku环境变量进行配置

waxmsbnn  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(164)

目前,我所有的密钥和API密钥都在我config.py的github repo的www.example.com文件中,我通过

app.config.from_object('config.Config')

github回购是私有的,但这是最糟糕的做法。我想与其他人共享我的github回购以进行协作。首先,我必须隐藏我所有的密钥,然后我可以将回购公开(或者创建一个从未包含密钥的新回购),然后共享回购。
现在我需要一个布尔值来决定如何配置,我目前使用的是:

is_heroku = environ.get('IS_HEROKU', None)
if is_heroku:
    app.config.from_prefixed_env()
else:
    app.config.from_object('config.Config')

我在GUI中设置了一组heroku环境变量,如下所示:

假设我所有的环境变量都以“FLASK_”开始,然后使用app.config.from_prefixed_env(),它会自动使用这些变量进行配置。但事实并非如此。我不确定这里出了什么问题,也不知道我是否应该用heroku进行不同的配置。本地配置仍然工作正常。
很抱歉,我对计算机和网络开发很不在行。我是一名数学博士后,正试图把学习编程作为一种业余爱好。

rjjhvcjd

rjjhvcjd1#

请确保您已通过下面提到的CLI或GUI方法在HEROKU配置变量中设置了IS_HEROKU值...还要确保您运行的是heroku版本,而不是内置开发服务器,以便Heroku配置变量能够正常工作。
Heroku对此有一套系统
您可以使用命令行或通过Web UI输入生产(Heroku)配置变量,而不是将其存储在文件中。
Heroku命令行方法:

heroku config:set THEANSWERTOEVERYTHINGEVER=42

我喜欢Web UI方法,因为它很漂亮(它在应用程序设置中)。
管理开发配置变量的方式是在.env文件中以YAML格式编写它们

应用程序根目录中.env文件的内容(GITIGNORE THIS)

这些仅适用于您的开发环境

THEANSWERTOEVERYTHINGEVER=42
ENVIRONMENT="DEVELOPMENT"

然后在应用程序文件中添加

import os

您可以使用此语法获取配置变量

os.environ.get('THEANSWERTOEVERYTHINGEVER')

最后也是最重要的一步!
用heroku local而不是python myapp.py启动你的服务器。这将启动Heroku的服务器并加载你的本地配置变量。如果你没有Heroku Toolbelt,可能需要它。
官方文档链接:https://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars
有关如何将.env文件用作环境变量的详细信息
https://medium.com/thedevproject/start-using-env-for-your-flask-project-and-stop-using-environment-variables-for-development-247dc12468be
链接到最初回答:https://stackoverflow.com/a/32321268/8401179

pn9klfpd

pn9klfpd2#

使用Heroku时,存储API密钥和密钥的最佳位置是:
https://dashboard.heroku.com/apps/YOURAPPNAME/settings
然后使用操作系统调用配置变量(Heroku对它们的名称)或环境变量,因为它们是众所周知的。How to set environment variables in Python?
以下是区分配置的方法(取决于您是通过localhost进行测试,还是您的应用已上线):

import os

ENV = 'LIVE'

if ENV == 'dev':
    ...
    # Store your secret keys and API keys by creating a local .env file. 
    
if ENV == 'LIVE':
    sitekey = os.environ.get('GOOGLE_SITE_KEY')
    # Heroku will default to Settings > Config Vars

相关问题