如何使用create_app将flask应用程序中的不同配置设置提供给uwsgi?

问题描述 投票:1回答:2

在我的Flask应用程序的config.py中,我有LocalConfigProdConfig,后者将用于生产,一旦部署应用程序。

现在我正在使用uWsgiNginx提供应用程序,这里是我创建的myapp.wsgi

from myapp import create_app
from myapp.config import ProdConfig

app = create_app(config=ProdConfig)

在其他一个app.py create_app定义为:

def create_app(config=None, app_name=None, blueprints=None):

    # some code
    app = Flask(app_name, instance_path=INSTANCE_FOLDER_PATH, instance_relative_config=True)
    configure_app(app, config)
    # some other code

    return app

def configure_app(app, config=None):
    """Different ways of configurations."""

    app.config.from_object(LocalConfig)
    app.config.from_pyfile('production.cfg', silent=True)

    if config:
        app.config.from_object(config)

我想知道,与uWSGI合适吗? uWSGI能否成功应用ProdConfig

或者使用环境变量来区分不同的配置设置是否更好?像if os.environ.get('PROD', True): #do something

哪种方式更好? Flask的create_app() one或env变量一个?任何其他合适的方法?

python nginx flask uwsgi
2个回答
4
投票

执行此操作的常用方法是将配置存储在字典中。

class Config:
     ALL_CAPS_CONFIG = 'SOME VALUE'

class DevConfig(Config):
    pass

class TestConfig(Config):
    pass

class ProdConfig(Config):
    pass

configs = {
  'dev'  : DevConfig,
  'test' : TestConfig,
  'prod' : ProdConfig,
  'default' : ProdConfig
  }

然后你实际创建你的应用程序,你会做这样的事情::

from config import configs
import os

evn = os.environ.get('MY_FLASK_APP_ENV', 'default')

create_app(config=configs[evn])

这样,您可以通过更改shell中的变量轻松地在环境之间切换。


3
投票

将环境变量指向完全独立的config.py文件实际上要好得多。我个人有一个config.py文件,其中包含我的基本和开发设置,然后是我的生产配置的另一个config.py,其位置是从环境变量中指定的。

我建议您查看Flask Configuration文档,因为它在解释如何设置配置文件方面做得很好。

© www.soinside.com 2019 - 2024. All rights reserved.