在我的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变量一个?还有其他合适的方法吗?
答案 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文档,因为它可以很好地解释如何设置配置文件。