如何在烧瓶应用服务于不同的配置设置使用create_app到uwsgi?(How to serve

2019-10-20 22:07发布

在我的瓶的应用程序的config.py我有LocalConfigProdConfig和后者是在生产中使用,一旦应用程序部署。

现在,我使用uWsgi服务应用Nginx ,这里的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

哪种方式更好? 瓶的create_app()一个或环境变量吗? 任何其他合适的方法呢?

Answer 1:

这样做的一种常见的方式是存储在字典中的配置。

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改变一个变量轻松切换。



Answer 2:

它实际上是更漂亮的环境变量指向一个完全独立的config.py文件。 我个人有一个包含我的基础和发展的设置,然后又config.py我的生产配置,其位置由一个环境变量指定的config.py文件。

我建议你看看瓶配置文件,因为它在解释中的配置文件应该如何设置做了很好的工作。



文章来源: How to serve different config settings in flask app to uwsgi using create_app?