在我的 Flask 应用程序的 config.py 中,我有 LocalConfig 和 ProdConfig 后者将在部署应用程序后用于生产。
现在我正在使用 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?
哪种方式更好? Flask 的 create_app() 一个还是 env 变量一个?还有其他合适的方法吗?
请您参考如下方法:
一种常见的做法是将配置存储在字典中。
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 中的变量轻松地在环境之间切换。
