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

Обзор

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

Инструменты

Джанго

мерзавец

юг

Postgres

Задача

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

Добавление:

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 30 октября 2009

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

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

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

2 голосов
/ 29 октября 2009

Вам, вероятно, стоит взглянуть на Юг:

http://south.aeracode.org/

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

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

0 голосов
/ 29 октября 2009

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

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

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

...