在heroku中为flask app设置环境变量

ste*_*tla 6 python heroku flask

我有一个烧瓶应用程序,它使用不同的配置文件用于开发和生产环境.相关的代码是这样的:

app.config.from_object('config.dev')
app.config.from_envvar('SPOTPIX_SETTINGS', silent=True)
Run Code Online (Sandbox Code Playgroud)

当我在我的本地服务器上进行开发时,配置来自config.dev,但是当我将代码推送到heroku时,我想设置SPOTPIX_SETTINGS环境变量以指向'config.prod'文件.这可以在heroku命令行客户端中完成,如下所示:

heroku config:set SPOTPIX_SETTINGS= 
Run Code Online (Sandbox Code Playgroud)

但是,我不知道我应该在等号的右侧写什么,因为我无法将生产配置文件的绝对路径分配给环境变量,因为这在heroku中与在我的不一样.开发机器.

非常感谢你!

lev*_*evi 10

您应该使用a env variable来查看您是在dev还是heroku.

heroku config:set IS_HEROKU=True 
Run Code Online (Sandbox Code Playgroud)

然后在你的文件中

import os
is_prod = os.environ.get('IS_HEROKU', None)

if is_prod:
    #here goes all your heroku config
Run Code Online (Sandbox Code Playgroud)


Ale*_*ine 6

我对你的项目一无所知,但Heroku有一个系统.

您可以使用命令行或Web UI输入它们,而不是将生产(Heroku)配置变量存储在文件中.

命令行方法:

heroku config:set THEANSWERTOEVERYTHINGEVER=42

我喜欢Web UI方法,因为它很漂亮(它在应用程序设置中).

您将如何管理开发配置变量,您将在.env文件中编写YAML样式

# Contents of .env file in application root (GITIGNORE THIS)

# These are only for your development environment

THEANSWERTOEVERYTHINGEVER=42
ENVIRONMENT="DEVELOPMENT"
Run Code Online (Sandbox Code Playgroud)

然后在你的应用程序文件中添加 import os

您可以使用此语法获取配置变量 os.environ.get('THEANSWERTOEVERYTHINGEVER')

最后但最重要的一步!

用heroku local而不是启动服务器python mysweetapp.py.这将启动Heorku的服务器并为您加载本地配置变量.如果你没有它,可能需要Heroku Toolbelt.

一切都在这里.https://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars