Flask:通过OS环境变量覆盖config.py文件的环境变量

时间:2018-01-13 16:25:53

标签: python python-3.x flask amazon-elastic-beanstalk

我有一个烧瓶应用程序,它使用以下格式来加载配置值。

#in application.py file

app = Flask(__name__, instance_relative_config=True)
app.config.from_object(app_config)
app.config.from_pyfile('config.py')


#in config.py file

class Config(object):
    DEBUG = True
    SQLALCHEMY_ECHO = True

app_config = Config

# in instance/config.py
SECRET_KEY = '........'
SQLALCHEMY_DATABASE_URI = 'mysql://root:.......'

我正在将它部署到aws elastic-beanstalk。我可以使用aws web console设置环境变量。 enter image description here

有没有办法在aws管理区设置SQLALCHEMY_DATABASE_URI,让它覆盖在config.py文件中加载的SQLALCHEMY_DATABASE_URI

上面只是一个例子,我有一长串的配置值,我想只保留在aws上。

2 个答案:

答案 0 :(得分:2)

对于Flask的app.config,加载第二组变量,紧随其后。 Flask的以下示例引用了两种不同的访问方法,但也应适用于相似的连续上传。

  

Most applications需要多个配置。生产服务器和开发过程中至少应使用单独的配置。解决此问题的最简单方法是使用始终加载的默认配置和版本控制的一部分,并使用一个单独的配置,如上面的示例中所述,该配置根据需要覆盖值:

app = Flask(__name__)
app.config.from_object('yourapplication.default_settings')
app.config.from_envvar('YOURAPPLICATION_SETTINGS')

要进行更明确的覆盖,请在从现有配置文件中加载配置后查看使用flask app.config.update。

  

update([other])   使用其他键/值对更新字典,覆盖现有键。不返回任何内容。

app.config.from_envvar('DEFAULT_CONFIG_FILE')
app.config.update('OVERRIDING_CONFIG_FILE')

http://flask.pocoo.org/docs/1.0/config/

答案 1 :(得分:0)

您应该import os,然后

SQLALCHEMY_DATABASE_URI = os.getenv('SQLALCHEMY_DATABASE_URI',
                                    'sqlite:////tmp/your_default.db')

如果您未指定URI,则如果您希望引发异常,请指定os.getenv['SQLALCHEMY_DATABASE_URI']。请注意避免在import时间之后推迟此类作业。

编辑:在使用URI之前分配URI。例如,OP问题指定了“#in instance / config.py”。