python - Flask:.env & 中的 app.config 设置。 mod_wsgi 中的flaskenv

标签 python flask mod-wsgi wsgi

我花了相当长的时间试图弄清楚如何在 Google Cloud Platform 服务器的 Flask 后端中设置 .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)

最佳答案

最简单的方法是使用 load_dotenv() 和 from_mapping

from flask import Flask
from dotenv import load_dotenv , dotenv_values

load_dotenv()

app = Flask(__name__)
config = dotenv_values()
app.config.from_mapping(config)

关于python - Flask:.env & 中的 app.config 设置。 mod_wsgi 中的flaskenv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58602833/

相关文章:

python - Django 中的博客摘录

python 和甲骨文

macos - 6000端口有什么特别之处?

python - 如何使用 Flask test_client 设置请求参数?

python - 无法在虚拟环境中运行 django wsgi

python - 内部服务器错误 : Target WSGI script cannot be loaded as Python module AND IOError: [Errno 2] No such file or directory: 'client_secrets.json'

python - xpath lxml无法获取html的ul标签内的所有元素

Python 3.2 - 连接和字符串格式化行为不符合预期

python - 在 wtform 提交上更新 SQLAlchemy 记录

python - django.core.urlresolvers.resolve 在 apache 非 root 部署下的不正确行为