База данных Django не всегда доступна

Я указал несколько баз данных в settings.py. Одна из баз данных — это локальная база данных Oracle, которая доступна только на моем рабочем компьютере. Поэтому, когда я открываю свой сайт на компьютере, у которого нет доступа к этой базе данных Oracle, я вижу ошибку A server error occurred. Please contact the administrator..

Таким образом, мой код работает так, как должен, когда я нахожусь на своем рабочем компьютере, но терпит неудачу, когда я использую свою страницу в Интернете с другого компьютера, у которого нет доступа к локальной базе данных Oracle.

Я не хочу получать удаленный доступ к локальной базе данных. Я просто хочу игнорировать ошибку, когда у меня нет доступа к локальной базе данных Oracle.


person Jamgreen    schedule 22.04.2014    source источник
comment
lincolnloop.com/django-best-practices/   -  person dm03514    schedule 22.04.2014
comment
Это не имеет смысла. Не местоположение вашего браузера определяет доступ к базе данных, а сервер: это сервер, который обращается к Oracle. Здесь происходит что-то еще.   -  person Daniel Roseman    schedule 22.04.2014
comment
Daniel Roseman: Может быть, это потому, что я не установил модуль cx_Oracle?   -  person Jamgreen    schedule 23.04.2014


Ответы (2)


Вы можете использовать файл local.py в своем модуле настроек, который уникален для среды, над которой вы работаете. Учитывая модуль настроек, вы можете поместить в свой __init__.py следующее:

try:
    import .local
except ImportError:
    pass

Затем на машине, где доступна база данных Oracle, установите правильные настройки в файле локальных настроек, но не регистрируйте их в своей системе контроля версий (например, поместите их в .gitignore).

Также следите за порядком в своих настройках, после того как вы импортируете свои локальные настройки, вы не должны переопределять их, если хотите сохранить изменения. Вы можете переместить импорт вниз в файл или просто добавить настройки в существующий dict.

person knbk    schedule 22.04.2014

Вы можете использовать операторы if в своем settings.py, так как это всего лишь скрипт Python. Таким образом, вы можете добавить функцию для определения того, находитесь ли вы на работе, а затем использовать эту функцию, чтобы решить, следует ли добавить базу данных только для работы в переменную DATABASES.

# in settings.py

def at_work():
    'Determines whether the project runs at work'

if at_work():
    DATABASES = {...}
else:
    DATABASES = {...}

Конечно, если ваши модели зависят от базы данных, которая доступна только на работе, вам потребуется добавить фиктивную базу данных, чтобы разрешить использование моделей в другом месте, даже если данные недоступны.

person pvoosten    schedule 22.04.2014
comment
Спасибо! Как я могу определить, нахожусь ли я за своим рабочим компьютером? - person Jamgreen; 22.04.2014
comment
Вы можете установить переменную среды, прочитать имя хоста, создать для него специальный файл в любом месте по вашему выбору и т. д. Существует множество возможностей. Подойдет все, что зависит от системы. - person pvoosten; 22.04.2014
comment
Мне кажется, обычно это достигается путем создания нескольких файлов настроек, lincolnloop. com/django-best-practices/ - person dm03514; 22.04.2014