Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在heroku中为flask应用程序设置环境变量_Python_Heroku_Flask - Fatal编程技术网

Python 在heroku中为flask应用程序设置环境变量

Python 在heroku中为flask应用程序设置环境变量,python,heroku,flask,Python,Heroku,Flask,我有一个flask应用程序,它在开发和生产环境中使用不同的配置文件。相关代码如下所示: app.config.from_object('config.dev') app.config.from_envvar('SPOTPIX_SETTINGS', silent=True) 当我在本地服务器上开发时,配置取自config.dev,但当我将代码推送到heroku时,我希望将SPOTPIX_设置环境变量设置为指向“config.prod”文件。这可以在heroku命令行客户端中完成,如下所示: he

我有一个flask应用程序,它在开发和生产环境中使用不同的配置文件。相关代码如下所示:

app.config.from_object('config.dev')
app.config.from_envvar('SPOTPIX_SETTINGS', silent=True)
当我在本地服务器上开发时,配置取自config.dev,但当我将代码推送到heroku时,我希望将SPOTPIX_设置环境变量设置为指向“config.prod”文件。这可以在heroku命令行客户端中完成,如下所示:

heroku config:set SPOTPIX_SETTINGS= 
但是,我不知道应该在等号的右边写什么,因为我无法将生产配置文件的绝对路径分配给环境变量,因为这在heroku中与在我的开发机器中不同。


多谢各位

您应该使用
env变量
查看您是在dev中还是在heroku中

heroku config:set IS_HEROKU=True 
然后在你的档案里

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

if is_prod:
    #here goes all your heroku config

我对你的项目一无所知,但Heroku有一套系统来做这个

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

命令行方法:

heroku配置:将answertoeverythingever=42设置为

我喜欢WebUI方法,因为它很漂亮(它是应用程序内设置)

管理开发配置变量的方法是在.env文件中以YAML样式编写它们

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

# These are only for your development environment

THEANSWERTOEVERYTHINGEVER=42
ENVIRONMENT="DEVELOPMENT"
然后在应用程序文件中添加
importos

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

最后也是最重要的一步

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


都在这里

多谢各位。但只有一个问题:在第一行中,您编写了以下“app.config.from_envvar('IS_HEROKU',silent=True)”。你为什么这么做?这会临时用IS_HEROKU环境变量的值填充应用程序配置对象,这是不需要的。如果写:“if os.environ.get('NOT_HEROKU',None)”,然后在满足此条件时写:“app.config.from_object('config.prod')”,不是更干净吗?@StenSootla是的,对不起,我的错,我已经解决了。