2015-10-01 3 views
1

В нашем проекте мы не движемся с помощью Django ORM, поэтому я не могу использовать проверки Django db. У меня есть требование проверить соединение БД перед запуском сервера. Может ли кто-нибудь помочь мне с лучшей практикой добиться того же?Проверка соединений Django DB на сервере запуска

Что я имею в виду, представляет несколько строк кода или модуля в файле управления.py, который будет проверять подключение к БД перед тем, как перейти к execute_from_command_line (sys.argv). Является ли мой подход правильным или есть лучший способ добиться того же.

ответ

1

Вы можете написать свою собственную управлять команду, которая будет проверять соединение с базой данных, и если это нормально позвонить runserver Команда:

from django.core.management.base import BaseCommand 
from django.core.management import call_command 
from django.db import connection 


class Command(BaseCommand): 
    def handle(self, *args, **options): 
     cursor = connection.cursor() 
     cursor.execute("select 1") 
     call_command('runserver') 
+0

, который является наиболее удачным местом для хранения этого командного файла? я не хочу держать его в django \ core \ management \ commands, а хочу найти его в нашем проекте dir @Eugene – Sam

+1

команды управления должны быть размещены в app/management/commands: https://docs.djangoproject.com/en /1.8/howto/custom-management-commands/ –

+0

В процессе производства вам не следует использовать серверы запуска. Возможно, приложение wsgi.py приложения является лучшим местом для проверки. – Alasdair

0

Если вы хотите, чтобы заменить команду runserver и ввести тест перед запуском:

проект/settings.py

INSTALLED_APPS = [ 
    ... 
    'project.app', 
    'django.contrib.staticfiles' 
    ] 

порядок важен, поскольку он определяет, какие приложения будут перегружать ВЗ ее управленческие команды.

проект/приложение/Управление/Команды/runserver.py

from django.core.management.commands.runserver import Command as BaseCommand 

class Command(BaseCommand): 
    def __init__(self, *args, **kwargs): 
     try: 
      #test your connections 
     except SomeException as e: 
      #handle your error 
     super(BaseCommand, self).__init__(*args, **kwargs) 

Таким образом, ваша команда runserver всегда проверяет ограничение перед каждым запуском. Вы также можете сделать ререйз ошибки в предложении except, если вы хотите выполнить команду не. Это привело к тому, что код инициализации запускался дважды, я не уверен, почему.

Если вы используете Джанго-devserver то импорт становится:

from django_devserver.devserver.management.commands.runserver import Command as BaseCommand 
Смежные вопросы