2016-01-15 3 views
1

У меня возникла проблема с конфигурацией загрузки в колбе.Колба не загружает конфигурацию

from config import config, DevelopmentConfig, TestingConfig, ProductionConfig 

def create_app(config_name): 
    app = Flask(__name__) 
    app.config.from_object(config[config_name]) # Doesnot load configuration 
    app.config.from_object(DevelopmentConfig) # Loads configuration succesfully. 

Я проверил тип конфигурации [имя_конфигурации] и т. Д. Они просто прекрасны.

Конфигурационный файл приводится ниже. Нет проблем с импортом, типами объектов. Если прошло статически, все будет хорошо. 'host' = 'serverip' намеренно.

Кроме того, эта проблема не возникает, когда я пытаюсь подключиться к db с помощью SQLAlchemy, но в случае MongoDB он не обновляет MONGODB_SETTINGS в настройках приложения.

import os 
basedir = os.path.abspath(os.path.dirname(__file__)) 

from helper.helper_functions import generate_secret_key 

class Config: 
    SECRET_KEY = os.environ.get('SECRET_KEY') or generate_secret_key() 
    SSL_DISABLE = False 

    @staticmethod 
    def init_app(app): 
     pass 


class DevelopmentConfig(Config): 
    DEBUG = True 
    MONGODB_SETTINGS = { 
     'DB': 'development_db', 
     'host': 'localhost', 
     'port': 27017 
    } 


class TestingConfig(Config): 
    TESTING = True 
    WTF_CSRF_ENABLED = False 
    MONGODB_SETTINGS = { 
     'DB': 'testing_db', 
     'HOST': 'localhost', 
     'PORT': 27017 
    } 


class ProductionConfig(Config): 
    MONGODB_SETTINGS = { 
     'DB': 'production_db', 
     'host': 'server_ip', 
     'port': 27017,  # default =27017 
     # other settings... 
    } 

    @classmethod 
    def init_app(app): 
     Config.init_app(app) 

config = { 
    'development': DevelopmentConfig, 
    'testing': TestingConfig, 
    'production': ProductionConfig, 
    'default': TestingConfig, 
} 

Интересно.

app.config.update(MONGODB_SETTINGS={'DB':'testing_db'}) # works 
settings = dict([('db', 'testing_db')]) 
app.config.update(MONGODB_SETTINGS=settings) # Does not work 

Кроме того, когда я пытаюсь загрузить конфигурацию из файла конфигурации, используя другой метод, предложенный Flask-Config.

conf_name = 'test-config.py' 
app.config.pyfile(conf_name) # Doesnot load the configuration from the file. 
app.config.pyfile(''+conf_name) # Doesnot load the configuration from the file. 
app.config.pyfile('test-config.py') #successfully loads the configuration from file. 
+0

Можете ли вы поделиться исходным кодом для конфигурации? Нам нужно увидеть, как определяются DevelopmentConfig и другие. –

+0

Как вы это называете? – jimjkelly

+0

Использование диспетчера Flask-script, а также для запуска unittests. Я потратил довольно много времени на тестирование всего остального. Он работает нормально. Проблема именно в этом вопросе, о котором я упоминал в вопросе. – ebd

ответ

1

Я считаю, что проблема может заключаться в том, что вы даете объект Python для app.config.from_object, когда он ожидает строку. Из документов:

app = Flask(__name__) 
app.config.from_object('yourapplication.default_settings') 
app.config.from_envvar('YOURAPPLICATION_SETTINGS') 

http://flask.pocoo.org/docs/0.10/config/#configuring-from-files

Так что в вашем случае вы можете сделать что-то вроде:

app.config.from_object('your_app.config.{}'.format(config_name)) 

где config_name соответствует объект в config.py.

+0

Спасибо за ответ. К сожалению, это не сработает. Кроме того, app.config.from_object (config [имя_конфигурации]) отлично работает, когда я использую SQLAlchemy, но в случае MONGODB он не обновляет MONGODB _SETTINGS. – ebd

+0

Хорошо помните, что эта строка в from_object коррелирует непосредственно с именем объекта, поэтому вам нужно 'your_app.config.DevelopmentConfig', например. Я взял ваш код и создал небольшой тест, и он работает при настройке, как будто при необходимости распечатайте имя_конфигурации или еще лучше зайдите в отладчик, чтобы убедиться, что он работает. – jimjkelly

+0

Конечно, я буду использовать отладчик. Я попытался напечатать переменную и т. Д. Проблема возникает главным образом, когда она не изменяет MONGODB_SETTINGS в конфиге. У меня есть другой связанный с этим вопрос, который больше соответствует вашему вопросу. http://stackoverflow.com/questions/34808010/flask-monogengine-configuration – ebd