我将.flaskenv中设置环境变量为FLASK_ENV=production,其余文件保持不变,没有创建.env文件。
同时,在bluelog文件夹下的__init__.py文件第33行增加一句print(config_name),如f附图1处。
终端运行flask run,附图2处显示环境为production,然而print的结果却是development。那么我最终运行的环境到底是哪个。
我将.flaskenv中设置环境变量为FLASK_ENV=production,其余文件保持不变,没有创建.env文件。
同时,在bluelog文件夹下的__init__.py文件第33行增加一句print(config_name),如f附图1处。
终端运行flask run,附图2处显示环境为production,然而print的结果却是development。那么我最终运行的环境到底是哪个。
FLASK_ENV
是 Flask 内部使用的环境变量,用来读取运行环境。
你打印的 config_name
是用来存储配置名称,和环境变量 FLASK_ENV
无关,而是你自己调用工厂函数时传递进来的参数。如你图中第一处前两行的代码(L30)所示,如果没有传递进来 config_name
,那么就从一个自定义的环境变量(FLASK_CONFIG
)读取,如果没有设置这个环境变量,那么就使用默认值 development
,即你打印出来的值。
我明白了,还有一个问题:
按照我现在的调试习惯,部署代码时使用flask forge,.flaskenv和.env都会生效。而正式运行时执行gunicorn xxx wsgi:app,.flaskenv会失效。
按照这样的特性,除了FLASK_APP和FLASK_ENV,其他的配置参数是否应该都放在.env中。
单纯的配置(非敏感数据、和程序启动流程无关)应该放到配置文件(类似 config.py 或是 settings.py)。
既然你生产环境只会读取 .env,那就把生产环境下需要用到的环境变量放到 .env。.flaskenv 通常只用来放 Flask 内部使用的环境变量(比如 FLASK_ENV
、FLASK_APP
、FLASK_RUN_PORT
)+开发环境需要设置的环境变量。