Как гарантировать, что изменения базы данных могут быть легко перенесены через DVCS с помощью django

обзор

Я создаю сайт в Джанго. Мне нужно разрешить людям начинать добавлять планшеты и устанавливать некоторые настройки в админке. Эти изменения должны быть окончательными, поскольку эта информация поступает от клиента. Однако я также разрабатываю бэкэнд и буду создавать и переносить таблицы. Я проталкиваю эти изменения в хаб.

инструменты

Джанго

мерзавец

юг

Postgres

проблема

Как я могу гарантировать, что я получу изменения базы данных с онлайн-сайта до меня на моем лапе, а также как я могу перенести изменения своей базы данных на действующий сайт, чтобы у нас была минимальная необходимая координация? Я знаком с git hooks, так что этот вариант в игре.

Приложение:

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

Благодарю.

3 ответа

Решение

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

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

Вы можете попробовать использовать git hooks, чтобы автоматизировать некоторые из них, но если вы хотите автоматизации, я рекомендую вместо этого попробовать что-то вроде Fabric. Многое из этого не нужно запускать каждый раз, когда вы нажимаете / извлекаете (в частности, я обычно не хотел бы сбрасывать новый фиксатор данных так часто).

Вы, вероятно, должны взглянуть на Юг:

http://south.aeracode.org/

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

В противном случае, каждый раз, когда вы выполняете push, вам придется вручную выполнить шаги миграции самостоятельно. Не забудьте выложить сообщение "Сайт находится на обслуживании".;)

Я рекомендую вам использовать mk-table-sync для переноса изменений с живого сервера на ваш ноутбук. mk-table-sync принимает много параметров, поэтому вы можете автоматизировать этот процесс с помощью Fabric. По сути, вы должны создать фабричную функцию, которая выполняет mk-table-sync на каждом планшете, который вы хотите получить с сервера.

Это означает, что вы не можете вносить изменения в dabatase самостоятельно, потому что они будут перезаписаны.

Единственные изменения, которые вы вносите в действующую базу данных, это использование South. Вы должны отправить код на сервер, а затем запустить миграцию, чтобы обновить схему базы данных.

Другие вопросы по тегам