【问题标题】:Flask environment ignored in config.pyconfig.py 中忽略了 Flask 环境
【发布时间】:2020-10-09 02:43:22
【问题描述】:

我正在尝试构建一个基本的烧瓶应用程序用于学习目的。一切顺利,但有一个我不明白的问题。在我的 run.py 文件中,我有以下行:

app.config.from_object('config.prodConfig')

这会在根目录中加载 config.py,其中包含以下代码:

class Config:
SECRET_KEY = '1234567890'
STATIC_FOLDER = 'static'
TEMPLATES_FOLDER = 'templates'

class devConfig(Config):
FLASK_ENV = 'development'
DEBUG = True
TESTING = True

class prodConfig(Config):
FLASK_ENV = 'production'
DEBUG = False
TESTING = False

我的理解是 Config 包含一些“默认”设置。 devConfig 和 prodConfig 基于 Config,因此将始终包含这些值,但每个都有不同的 env、debug 和 testing 值。虽然我没有收到任何错误并且调试似乎已激活,但当我运行我的 Flask 实例时,它告诉我我正在生产中运行,无论我做什么。

 * Serving Flask app "run" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

我对在终端/环境中设置 env 变量不感兴趣,我知道该怎么做。我感兴趣的是为什么这不起作用。毕竟,FLASK_ENV 指令是一个有效的指令,它应该在被指示时加载。

我做错了什么?

【问题讨论】:

  • documentation 特别警告不要在代码中设置 FLASK_ENV,因为如果应用程序已经设置,任何更改都可能不会生效。
  • 解决办法是什么?
  • 你想设置ENV而不是FLASK_ENV。同样,文档警告不要在代码中这样做。

标签: flask config environment production


【解决方案1】:

考虑到 Chase 的评论,关于不在应用程序中设置 FLASK_ENV。从您的config.py 传递您的配置的dict,并根据您的应用程序外部设置的 FLASK_ENV 选择适当的配置,例如带有.env 文件。

config.py

class BaseConfig:
    ...

class DevConfig(BaseConfig):
    ...

class ProdConfig(BaseConfig):
    ...

configs = {"development": DevConfig, "production": ProdConfig}

app.py

import os
from flask import FLask
from config import configs
...
app.config.from_object(configs[os.environ.get("FLASK_ENV", "development")])

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2021-02-13
    • 2014-05-30
    • 2021-10-27
    • 1970-01-01
    • 2012-09-05
    • 2020-03-31
    • 1970-01-01
    • 2016-05-14
    相关资源
    最近更新 更多