У меня есть приложение на основе Python, которое содержит большое количество модулей и взаимодействует с двумя базами данных:
- метаданные (которые необходимо обновлять в определенных случаях)
- данные клиентаЭто приложение можно развернуть вручную в среде без доступа к Интернету.
Какие рекомендации и рекомендации следует учитывать при реализации механизма обновления для такого типа системы? Почти всеинформация касается фазы упаковки и распространения - подписания и т. д., но меня больше беспокоит сам процесс обновления.
Я думал об обработке обновлений кода с помощью версий пакета pip и базы данных метаданных с помощью сценария на основе еговерсия.Это поднимает новые вопросы, такие как:
Как механизм должен обрабатывать обновления кода, которые имеют определенные побочные эффекты или предпосылки?Например, схема файла конфигурации пользователя была изменена - поэтому предыдущие конфигурации должны быть преобразованы в новую (я думаю, она должна быть прозрачной для пользователя).Очевидно, что это делается только при обновлении с версии X до Y, а не при чистой установке (где могут быть назначены значения по умолчанию).
Как это следует делать, особенно если у нас есть разрыв версий?- например, версия клиента - 1, последняя - 4, а необходимость преобразования - от 2 до 3. Это должно быть накопительное обновление, которое будет содержать все обновления (1-> 2-> 3-> 4) и обрабатывать их.все это со скриптами?Или каждое обновление должно быть самостоятельным, а клиент должен запускать серию обновлений?
- В случае, если база метаданных имеет огромный размер ~ Гбайт.Как лучше всего управлять своими обновлениями?Очевидно, не отправлять клиенту каждый раз всю базу данных - каков наилучший способ вычислить дельты между двумя версиями и отправить только скрипт с инструкциями DML?
- Как управлять зависимостью между базой данных и кодомбазовые версии?например, если поле в схеме базы данных было изменено, поэтому также необходимо обновить базовую версию кода (версия кода X поддерживает версию базы данных Y)?
- Как следует устранять ошибки в этих случаях?например, при установке нескольких обновлений пакетов pip, и один из них не работает в середине?как восстановить прежнее состояние?Есть ли хороший способ сделать резервную копию текущей версии помимо копирования файлов?