2012-06-29 4 views
0

В эти дни я изучаю, как программировать на BAE. BAE - облачная платформа, такая как GAE. Он поддерживает python 2.7 и MySQL. Но есть проблема, BAE предоставляет DATABASE информацию в запросе. Я могу получить эти настройки, как это:Как настроить параметры Django DATABASES во время выполнения?

port = request.META['HTTP_BAE_ENV_ADDR_SQL_PORT'] 

, но как я могу настроить параметры DATABASES во время выполнения?

Я попытался написать промежуточное программное обеспечение для этой проблемы, как это:

from django.conf import settings 

class bae_database(object): 
    def process_request(self, request): 
     BAE_DB = { 
      'default': { 
       'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
       'NAME': 'django',      # Or path to database file if using sqlite3. 
       'USER': 'root',      # Not used with sqlite3. 
       'PASSWORD': '',     # Not used with sqlite3. 
       'HOST': 'localhost',      # Set to empty string for localhost. Not used with sqlite3. 
       'PORT': '3306',      # Set to empty string for default. Not used with sqlite3. 
      }, 
     } 
     settings.DATABASES = BAE_DB 

Затем в settings.py файл я добавить связующее ПО MIDDLEWARE_CLASSES и установить DATABASES = {}. В результате я получаю сообщение об ошибке:

You haven't set the database ENGINE setting yet. 

На самом деле работает промежуточные, потому что в настройках части страницы ошибок Django я получаю:

DATABASES 
{'default': {'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'NAME': 'django', 'PASSWORD': '********************', 'PORT': '3306', 'USER': 'root'}} 

Я не знаю, почему, изменил атрибут DATABASES, но он бесполезен. Пожалуйста, помогите мне.

ответ

0

DATABASES == {} в settings.py? - Если да, попробуйте установить его в settings.py на что-то - например. значение теста, которое вы сейчас показываете в своем средстве программирования.

+0

django будет подключаться к базе данных с момента запуска только при установке DATABASE = {}. тестовое значение - это конфигурация работоспособности для моего компьютера. Если я устанавливаю DATABASES для проверки значения, у него нет проблем. но на BAE я могу просто получить конфигурацию из запроса. – mata

+0

, так что бессмысленно устанавливать статическую настройку – mata

+0

да, но я говорю, что в 'settings.py' вы должны установить' DATABASE' непустое, действительное значение. Вы можете изменить его в промежуточном программном обеспечении, но вы должны иметь * что-то * в 'DATABASES', когда вы запускаете другой Django, отказываетесь от запуска. – scytale