Ответ 1
Я обнаружил, что правильная команда для вызова в Django 1.4:
django-admin.py runserver --settings=myproject.settings_tests
Где эта информация находится в Django DOCS?
Спасибо за ваш ответ
Griffosx
Я использую Django 1.4
Мне нужно запустить сервер разработки, и я хочу указать (в команде), какую базу данных он должен использовать. Например, если мои настройки содержат:
DATABASES = {
'default': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
Я хочу использовать что-то вроде:
django-admin.py runserver --database=tests
Есть что-то подобное? Я также попытался использовать второй файл настроек, но параметр -settings не работает: (параметр -settings, кажется, устарел, в DOCS есть не упоминается вообще)
django-admin.py runserver --settings=settings_tests
или
django-admin.py runserver --settings settings_tests
вызывает ошибку:
ImportError: Could not import settings 'settings_tests' (Is it on sys.path?): No module named settings_tests
Любая помощь приветствуется, спасибо,
Griffosx
Я обнаружил, что правильная команда для вызова в Django 1.4:
django-admin.py runserver --settings=myproject.settings_tests
Где эта информация находится в Django DOCS?
Спасибо за ваш ответ
Griffosx
Более чистым и более масштабируемым способом переключения конфигураций, чем создавать несколько файлов конфигурации, будет использование переменных среды (см. # 3 методологии двенадцатифакторного приложения, используемой Heroku и другими). Например:
from os import environ
DATABASES = {
'main': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
default_database = environ.get('DJANGO_DATABASE', 'main')
DATABASES['default'] = DATABASES[default_database]
Затем вы можете изменить базу данных по умолчанию, установив переменную среды DJANGO_DATABASE
.
export DJANGO_DATABASE='tests'
./manage.py runserver
... или...
DJANGO_DATABASE='tests' ./manage.py runserver
Вы также можете установить переменные среды, используя код Python.
Изменить: Чтобы облегчить этот процесс, Кеннет Рейц написал небольшое небольшое приложение под названием dj-database-url.
Создайте settings_tests.py
со следующими параметрами:
from settings import *
DATABASES = {
'default': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
Выполнить django-admin.py runserver --settings=settings_tests
@Danilo Barges поставил простой способ решить проблему. Я только добавляю несколько изменений, чтобы иметь дело с запусками тестов. Это потому, что DATABASES['default'] = DATABASES[default_database]
добавит запись в словарь DATABASES
. Поэтому, если вы запускаете тесты, тестовый бегун будет работать против 'default'
и следующей записи в DATABASES
. Вместо этого используйте два словаря:
DATABASES_AVAILABLE = {
'default': {
'NAME': 'db.db',
'ENGINE': 'django.db.backends.sqlite3'
},
'tests': {
'NAME': 'tests.db',
'ENGINE': 'django.db.backends.sqlite3'
},
}
database = os.environ.get('DJANGO_DATABASE', 'main')
DATABASES = {
'default': DATABASES_AVAILABLE[database]
}