Управление базой данных на Django и Github - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь настроить веб-сайт, используя Django Framework. Из-за его удобства я выбрал SQLite в качестве базы данных с самого начала моего проекта. Его очень просто использовать, и я был очень доволен этим решением.

Будучи новым разработчиком, я совершенно новичок в Github и управлении базами данных. Поскольку базы данных SQLite находятся в одном файле, я смог сохранять свои обновления на Github sh, пока этот файл .db не достиг критического размера, превышающего 100 МБ. С тех пор кажется, что мой файл слишком велик для pu sh в моем хранилище (для других, имеющих такую ​​же проблему, я нашел удовлетворительные ответы здесь: GIT: Невозможно удалить файл из репозитория ).

Из-за этой проблемы я сейчас рассматриваю альтернативное решение:

Поскольку мой веб-сайт потребует, чтобы пользователи слишком взаимодействовали с моей базой данных (они ожидают публикации определенного количества данных), я думаю о переключение SQLite на MySQL. Мне сказали, что MySQL будет лучше обрабатывать пользовательские вводы и будет легче масштабироваться (я смею ожидать большой объем пользователей). Это первая часть моего вопроса. Является ли переход на MySQL после использования SQLite в течение некоторого времени хорошей идеей / хорошей практикой или это приведет к проблемам с миграцией?

Если ответ на этот первый вопрос положительный, то у меня есть другие вопросы о том, как справиться с этим изменением. Поскольку SQLite не имеет сервера, мне придется настроить новый сервер для MySQL. Смогу ли я получить доступ к своим данным удаленно с этого сервера? Так как я использовал pu sh для своей базы данных в моем Github-репозитории, именно здесь я получаю свои данные, когда хочу работать удаленно. Будет ли для меня способ разместить свои данные на сервере (надеюсь, бесплатно) и получить их так же, как я получаю свой код на Github?

Большое спасибо за вашу помощь, и я надеюсь, что у вас есть хороший день.

1 Ответ

1 голос
/ 09 апреля 2020

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

Отвечая на ваш первый вопрос, не должно возникнуть никаких проблем при переходе с SQLite на MySQL. Django обрабатывает миграции исключительно, а SQLite имеет меньше возможностей, чем MySQL. Для переноса ваших данных в базу данных mysql вы можете использовать django dumpdata и loaddata .

Теперь ваш второй вопрос немного сложнее , Вы всегда можете открыть свою базу данных для Inte rnet, но обычно это не очень хорошая идея, если вы точно не знаете, что делаете, и не знаете, как правильно ее защитить. Однако, если вы go таким образом, вы можете просто изменить параметры базы данных в файле настроек, чтобы они указывали на c IP-адрес базы данных вашей базы данных MySQL и добавить имя базы данных, пользователя и пароль.

Тем не менее, я рекомендую иметь одну базу данных для разработки в вашем устройстве разработки P C и другую на вашем рабочем сервере, которая находится за брандмауэром и доступ к которой возможен только через localhost. Я не думаю, что вам нужна база данных в вашем устройстве p c, чтобы всегда быть в курсе, если у вас есть некоторые примеры данных, которых должно быть достаточно.

Итак, вместо записи конфиденциальных данных в настройки файл, который вы можете иметь secrets.json файл в root вашего проекта, который выглядит следующим образом:

{
   "secret_key": "YOURSUPERSECRETKEY",
   "debug": true, TRUE IN YOUR DEV PC, FALSE IN YOUR PROD SERVER
   "allowed_hosts": ["127.0.0.1" , "localhost", "YOUR"], 
   "db_name": "YOURDBNAME",
   "db_user": "YOURDBUSER",
   "db_password": "YOURDBPASSWORD",
   "db_host": "localhost",
   "db_port": 3306
}

Этот файл должен быть включен в ваш .gitignore, чтобы он не передавался на ваш хранилище, и у вас будет один в вашем локальном p c и другой с другими настройками на вашем производственном сервере (вы можете использовать vi или nano для создания файла).

Затем в вашем файле settings.py вы может сделать следующее:

import json

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

try:
    with open(os.path.join(BASE_DIR, 'secrets.json')) as handle:
        SECRETS = json.load(handle)
except IOError:
    SECRETS = {}


SECRET_KEY = SECRETS['secret_key']

ALLOWED_HOSTS = SECRETS['allowed_hosts']

DEBUG = SECRETS['debug']

...

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': SECRETS['db_name'],
        'USER': SECRETS['db_user'],
        'PASSWORD': SECRETS['db_password'],
        'HOST': SECRETS['db_host'],
        'PORT': SECRETS['db_port'],
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...