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

时间:2014-09-09 13:03:25

标签: python nginx flask uwsgi

在我的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()一个或env变量一个?还有其他合适的方法吗?

2 个答案:

答案 0 :(得分: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中的变量,您可以轻松地在环境之间切换。

答案 1 :(得分:3)

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

我建议您查看Flask Configuration文档,因为它可以很好地解释如何设置配置文件。