我花了很长时间试图弄清楚如何在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 ...
阅读了更多有关此内容并尝试了许多不同的方法之后。我得出的结论是,没有使用.env-和.flaskenv -files配置Flask应用程序的合理方法。我最终使用了Configuration Handling中介绍的方法,该方法能够以合理的方式管理开发/测试/生产环境: