2016-02-11 48 views
1

flask documentation,我试图在我的项目中实现配置。但它似乎没有按预期工作。我可能错了。但我不明白我错过了什么。烧瓶配置文件不工作

class Config(object): 
    DEBUG = False 
    TESTING = False 
    CSRF_ENABLED = True 
    TIMEOUT_COUNT=60 
    DBCONFIG ={ 
     'DBNAME' : 'dbname', 
     'DBUSER' : 'laxmikant', 
     'DBPASSWORD' : '*******', 
     'DBHOST' : 'localhost' 
    } 

class ProductionConfig(Config): 
    SERVER_NAME = 'PRODUCTION' 
    dbcredentials = {'DBUSER' : 'produser', 'DBPASSWORD':'******'} 
    Config.DBCONFIG.update(dbcredentials) 

class DevelopmentConfig(Config): 
    SERVER_NAME = 'DEVELOPMENT' 
    DEVELOPMENT = True 
    TESTING = True 
    DEBUG = True 
    dbcredentials = {'DBUSER' : 'devuser', 'DBPASSWORD':'******'} 
    Config.DBCONFIG.update(dbcredentials) 

运行python run.py之前,我设置APP_SETTINGS为每enviornment:

export APP_SETTINGS="config.ProductionConfig" #- on production server 
export APP_SETTINGS="config.DevelopmentConfig" #- on dev server 

我读取配置文件和打印DBCONFIG两个服务器:

environment = os.environ['APP_SETTINGS'] 
    app.config.from_object(environment) 
    print '''[{}] INFO {}'''.format(app.config['SERVER_NAME'], app.config['DBCONFIG']) 

下面是实际输出用于生产服务器:

$ export APP_SETTINGS="config.ProductionConfig" 
laxmikant:~/workspace/project-xyz$ python run.py 
[PRODUCTION] INFO {'DBPASSWORD': '******', 'DBUSER': 'devuser', 'DBHOST': 'localhost', 'DBNAME': 'dbname'} 
[02-10 2016 22:39:33] INFO - * Running on http://0.0.0.0:3004/ (Press CTRL+C to quit) 

而对于开发服务器

$ export APP_SETTINGS="config.DevelopmentConfig" 
laxmikant:~/workspace/project-xyz$ python run.py 
[DEVELOPMENT] INFO {'DBPASSWORD': '******', 'DBUSER': 'devuser', 'DBHOST': 'localhost', 'DBNAME': 'dbname'} 
[02-10 2016 22:41:40] INFO - * Running on http://0.0.0.0:3004/ (Press CTRL+C to quit) 

查询的是,为什么development和生产config是给同DBCONFIG信息?

**注意** - 我不会使用python run.py进行生产,但在这里我只需测试配置。所以请忽略python run.py

+0

@Hussain-这就是错字! – Laxmikant

+0

@Hussain - 获取错误'名称'DBCONFIG'未定义' – Laxmikant

+0

哦。好的。我想不出为什么会发生这种情况。抱歉。 – Hussain

回答

1

您试图在子类中更新相同的父类的字典。尝试复制并更新它:

class ProductionConfig(Config): 
    dbcredentials = {'DBUSER' : 'produser', 'DBPASSWORD':'******'} 
    DBCONFIG = Config.DBCONFIG.copy() 
    DBCONFIG.update(dbcredentials) 

class DevelopmentConfig(Config): 
    dbcredentials = {'DBUSER' : 'devuser', 'DBPASSWORD':'******'} 
    DBCONFIG = Config.DBCONFIG.copy() 
    DBCONFIG.update(dbcredentials) 
+0

感谢您澄清错误! – Laxmikant