在我的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()
one或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中的变量轻松地在环境之间切换。
将环境变量指向完全独立的config.py文件实际上要好得多。我个人有一个config.py文件,其中包含我的基本和开发设置,然后是我的生产配置的另一个config.py,其位置是从环境变量中指定的。
我建议您查看Flask Configuration文档,因为它在解释如何设置配置文件方面做得很好。