Как гарантировать, что изменения базы данных могут быть легко перенесены через DVCS с помощью django
обзор
Я создаю сайт в Джанго. Мне нужно разрешить людям начинать добавлять планшеты и устанавливать некоторые настройки в админке. Эти изменения должны быть окончательными, поскольку эта информация поступает от клиента. Однако я также разрабатываю бэкэнд и буду создавать и переносить таблицы. Я проталкиваю эти изменения в хаб.
инструменты
проблема
Как я могу гарантировать, что я получу изменения базы данных с онлайн-сайта до меня на моем лапе, а также как я могу перенести изменения своей базы данных на действующий сайт, чтобы у нас была минимальная необходимая координация? Я знаком с git hooks, так что этот вариант в игре.
Приложение:
Я думаю, я знаю, какие таблицы могут быть изменены через администратора. Там не должно быть много совпадений на самом деле. Как я считаю далее, опасность на самом деле заключается в том, что я подталкиваю данные, которые перезаписывают то, что они сделали.
Благодарю.
3 ответа
Чтобы получить изменения вашей схемы на сервере, просто используйте South осторожно. Если вы изменяете какую-либо таблицу, в которой могут содержаться данные, убедитесь, что вы написали как миграцию схемы, так и по мере необходимости миграцию данных, чтобы сохранить смысл их данных.
Для того, чтобы вернуть вам свои обновленные данные (что не кажется критичным, но, возможно, было бы неплохо работать с современными тестовыми данными во время разработки), я обычно просто использую фикстуры Django и команды dumpdata и loaddata, Достаточно просто сбросить прибор и зафиксировать его в репозитории, а затем загрузить данные с вашей стороны.
Вы можете попробовать использовать git hooks, чтобы автоматизировать некоторые из них, но если вы хотите автоматизации, я рекомендую вместо этого попробовать что-то вроде Fabric. Многое из этого не нужно запускать каждый раз, когда вы нажимаете / извлекаете (в частности, я обычно не хотел бы сбрасывать новый фиксатор данных так часто).
Вы, вероятно, должны взглянуть на Юг:
Мне кажется, что вы, вероятно, могли бы создать git-ловушку, которая запускается на юге, если вы делаете какую-то систему непрерывной интеграции.
В противном случае, каждый раз, когда вы выполняете push, вам придется вручную выполнить шаги миграции самостоятельно. Не забудьте выложить сообщение "Сайт находится на обслуживании".;)
Я рекомендую вам использовать mk-table-sync для переноса изменений с живого сервера на ваш ноутбук. mk-table-sync принимает много параметров, поэтому вы можете автоматизировать этот процесс с помощью Fabric. По сути, вы должны создать фабричную функцию, которая выполняет mk-table-sync на каждом планшете, который вы хотите получить с сервера.
Это означает, что вы не можете вносить изменения в dabatase самостоятельно, потому что они будут перезаписаны.
Единственные изменения, которые вы вносите в действующую базу данных, это использование South. Вы должны отправить код на сервер, а затем запустить миграцию, чтобы обновить схему базы данных.