生产环境下环境变量放到 .flaskenv 还是 .env?

我将.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_ENVFLASK_APPFLASK_RUN_PORT)+开发环境需要设置的环境变量。