我已经花了相当长的时间试图弄清楚如何设置.env和. flakkenv配置值在我的flask后端在谷歌云平台服务器。我使用apache 2,mod_wsgi,Flask,Python 3.6和SQLAlchemy。我的后端工作良好,在我的Mac本地使用纯Flask。
安装了python-dotenv之后,运行flask命令将设置.env和. flakenv文件中定义的环境变量,但是这对wsgi不起作用,来自apache的请求被重定向以执行我的run.wsgi-file,没有机制(据我所知)可以设置.env和. flakenv文件中定义的环境变量。
最低要求是传递给应用程序的信息,如果测试或开发环境应该使用。从那里我可以在init.py填充app.config值从一个对象。然而,不知何故,能够使用配置值从.env和. flakenv会好得多。我真的很感激,如果有人有任何好主意在这里-最好的做法,以设置app.config值在wsgi环境。
有两个帖子提出了同样的问题-他们真的没有一个最佳实践如何应对这个挑战(我相信我不是唯一一个有困难的时间与此):
Why can't Flask can't see my environment variables from Apache (mod_wsgi)?
Apache SetEnv not working as expected with mod_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的模块(如果存在)加载默认设置。(www.example.com中介绍的方法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-only”如果您只想使用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)
3条答案
按热度按时间0sgqnhkj1#
在阅读了更多关于这方面的内容并尝试了许多不同的方法后,我得出了一个结论:使用.env和. flakenv文件配置Flask应用程序是没有合理的方法的。我最终使用了Configuration Handling中提供的一个方法,该方法可以以合理的方式管理开发/测试/生产环境:
我的run.wsgi(正在谷歌云平台计算示例中使用):
在我的Mac上,我使用run.py(用于flask运行):
用于应用程序创建init.py
在这一点上,看起来这对我的目的来说很好,最重要的是我可以很容易地管理不同的环境,并使用git将后端服务部署到google平台。
q5lcpyga2#
我也遇到了同样的难题,我想在使用
flask run
进行开发时,使用与docker-compose
相同的.env
文件,最终我使用了python-dotenv,如下所示:在
.env
中:在
config.py
中:我还没有尝试过它,但是我也可以结合这个解决方案来尝试一下flask-env。
mwyxok5s3#
最简单的方法是使用load_dotenv()和from_mapping