Django Deployment: обработка данных в базе данных - PullRequest
11 голосов
/ 06 августа 2010

Сейчас я использую git для развертывания Django, что мне кажется удовлетворительным. Моя единственная проблема заключается в том, как правильно обрабатывать данные в базе данных. Например. Мне часто приходится редактировать данные, поступающие с сайта производства, локально и помещать их обратно на сайт производства (обратите внимание, я говорю об изменениях данных, а не о переносе схем!). Я думаю, что рабочий процесс должен быть примерно таким:

Для меня важно, чтобы это также работало для внесения изменений в существующие строки базы данных, удаления и т. Д. *

Так что, если я начну экспериментировать с этим самостоятельно: 1. Будет ли это работать с любыми предложениями форматов дампа данных? 2. Кто-нибудь еще работает таким образом, может быть, уже есть готовые решения для сценариев (Fabric) для этого?

Ответы [ 4 ]

6 голосов
/ 07 августа 2010

Таблицы, которые я хочу сбросить / изменить / восстановить, довольно малы и доступны только для чтения через открытый интерфейс. Используется следующий подход:

  1. Данные сбрасываются с помощью команды ./manage.py dumpdata на сервере.
  2. Затем файл результатов передается в VCS на сервере.
  3. Я извлекаю изменения и выполняю ./manage.py loaddata.
  4. После внесения изменений ./manage dumpdata выполняется локально.
  5. Файл результатов передается в VCS и отправляется обратно на сервер
  6. . / Manage loaddata команда выполняется на сервере

Это можно автоматизировать с помощью Fabric, например,

1 + 2 + 3 = fab dump_data:cities, 4 + 5 + 6 = fab push_data:cities

Различия производятся внутри VCS. Этот подход не работает для всего, но я нашел его полезным для простых случаев.

2 голосов
/ 11 августа 2010

Если вы загружаете> изменяете> загружаете весь дамп, вы должны быть готовы к потере данных.Любые данные, созданные / измененные в процессе производства при загрузке, изменении или загрузке измененных данных , будут потеряны .

. Рекомендуется избегать этого , если вы можете изменять данные в производственной базе данных. будет:

  1. создать сценарий SQL на основе локальных изменений и выполнить его в рабочей базе данных,
  2. создать представление для обработки изменений данных и выполнить его на рабочем веб-сервере

или, если вы не можете изменить данные в производственной базе данных:

  • создать дамп, загрузить и загрузить его локально,
  • изменить данные локально,
  • создать локальный дамп,
  • сравнить удаленный дамп с локальным дампом и создать дамп, содержащий только измененные / добавленные записи ,
  • загрузить его и загрузить

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

2 голосов
/ 06 августа 2010

1) Я понимаю, что вы не говорите о миграции схемы.Однако существует такая вещь, как миграция данных .Я использовал Юг для внесения изменений в производственные данные, которые вы описали.Возможно, стоит потратить время на его изучение.

2) ИМХО применение diff - не лучший способ изменить дамп базы данных .Различия и слияния более применимы к исходному коду / тексту, чем к дампам базы данных.Тем не менее, мне любопытно узнать, успешно ли кто-нибудь делал diff / patch / merge для дампов базы данных.

1 голос
/ 06 августа 2010

Если вашей базой данных является SQL Server, у Red-Gate есть инструмент для сравнения данных, который вы можете использовать.Не уверен, какие инструменты доступны за пределами мира SQl Server.

...