Flask:来自.env&的app.config设置。 mod_wsgi中的flaskenv

问题描述 投票:0回答:1

我花了很长时间试图弄清楚如何在Google Cloud Platform服务器的烧瓶后端中设置.env和.flaskenv配置值。我正在使用apache2,mod_wsgi,Flask,Python 3.6和SQLAlchemy。我的后端使用纯Flask在Mac上可以在本地正常工作。

已安装python-dotenv,运行flask命令将设置文件.env和.flaskenv中定义的环境变量。但是,这不适用于wsgi。来自apache的请求被重定向到执行我的run.wsgi文件。没有任何机制(据我所知)来设置.env和.flaskenv中定义的环境变量。

如果要使用测试或开发环境,最低要求是传递给应用程序信息。从那里,我可以在init。py中填充对象的app.config值。但是,能够以某种方式使用.env和.flaskenv的配置值会更好。如果有人在这里有什么好主意,我将不胜感激-在wsgi环境中设置app.config值的最佳实践。

[已经有两篇文章提出了相同的问题-他们确实没有如何应对这一挑战的最佳实践(而且我确信我不是唯一对此感到困难的人:]]

Why can't Flask can't see my environment variables from Apache (mod_wsgi)?

Apache SetEnv not working as expected with mod_wsgi

我的run.wsgi:

import sys
sys.path.append("/var/www/contacts-api/venv/lib/python3.6/site-packages")
sys.path.insert(0,"/var/www/contacts-api/")
from contacts import create_app
app = create_app('settings.py')
app.run()

[3]:允许您使用预设方法配置应用程序。

from flask_appconfig import AppConfig
def create_app(configfile=None):
app = Flask('myapp')
AppConfig(app, configfile)
return app

create_app返回的应用程序将按顺序:

从存在于名为myapp.default_config的模块中加载默认设置。 (http://flask.pocoo.org/docs/config/#configuring-from-files中描述的方法)从配置文件中加载设置,该配置文件的名称在环境变量MYAPP_CONFIG中给出(请参见链接1)。直接从以MYAPP_开头的环境变量中加载json或字符串值,即设置MYAPP_SQLALCHEMY_ECHO = true将导致SQLALCHEMY_ECHO的设置为True。通过将适当的选项传递给构造函数或init_app(),可以更改或禁用任何这些行为。

[4]:使用“仅ENV”如果只想使用Flask-AppConfig的环境解析功能,则将公开适当的功能:

from flask_appconfig.heroku import from_heroku_envvars
from flask_appconfig.env import from_envvars
# from environment variables. note that you need to set the prefix, as
# no auto-detection can be done without an app object
from_envvars(app.config, prefix=app.name.upper() + '_')
# also possible: parse heroku configuration values
# any dict-like object will do as the first parameter
from_heroku_envvars(app.config)

我花了很长时间试图弄清楚如何在Google Cloud Platform服务器的烧瓶后端中设置.env和.flaskenv配置值。我正在使用apache2,mod_wsgi,Flask,Python 3.6 ...

python flask mod-wsgi wsgi
1个回答
0
投票

阅读了更多有关此内容并尝试了许多不同的方法之后。我得出的结论是,没有使用.env-和.flaskenv -files配置Flask应用程序的合理方法。我最终使用了Configuration Handling中介绍的方法,该方法能够以合理的方式管理开发/测试/生产环境:

© www.soinside.com 2019 - 2024. All rights reserved.