LINUX.ORG.RU

[Git] Как организовывать обновления кода и структуры SQL

 


0

2

Здравствуйте!


Интересует вопрос. Есть сервер с установленным приложением на PHP/Ruby/Java/C - неважно. Нужно уметь делать две вещи.

1. Устанавливать обновления кода через систему контроля версий, например, Git.

2. Вместе с обновлениями кода делать обновления структуры SQL-базы, ведь она может поменяться.

Нужно всё организовать максимально просто и дёшево.


С пунктом 1 планирую поступить так. На этом же сервере поднять Git-сервер. Коммитить в него все изменения. Когда нужно будет обновить ПО на сервере, зайти на сервер через SSH и обновиться с этого localhost-репозитария. Как вам такое решение?

С пунктом 2 что делать - не знаю. Нужно наверно писать какой-то конвертор структуры, который будет отслеживать какая версия структуры в данный момент, и какую надо получить, запуская соответсвующую функцию преобразования. Запускать данный конвертор перед обновлением ПО. Так это делается?

★★★★★

Запускать можно через хуки, только вот как-то надо проверять, чтоб скрипт конвертации не запустился два раза. Неужели формат базы данных будет менятся так часто, что руками лень?

xorik ★★★★★
()

С пунктом 2 что делать - не знаю

google://миграции.

power
()

Казалось бы, причем тут гит...

tailgunner ★★★★★
()

>С пунктом 1 планирую поступить так. На этом же сервере поднять Git-сервер. Коммитить в него все изменения. Когда нужно будет обновить ПО на сервере, зайти на сервер через SSH и обновиться с этого localhost-репозитария. Как вам такое решение?

Нормально, хотя, в принципе, по фигу - где разворачивать сервер гита.

С пунктом 2 что делать - не знаю. Нужно наверно писать какой-то конвертор структуры, который будет отслеживать какая версия структуры в данный момент, и какую надо получить, запуская соответсвующую функцию преобразования. Запускать данный конвертор перед обновлением ПО. Так это делается?

Пишешь апгрейд-скрипт, включешь его в скрипт деплоя, в чём сложность то?

yoghurt ★★★★★
()

в схеме базы данных где-то желательно иметь текующую версию и историю изменений

Harald ★★★★★
()

Как вам такое решение?

Глупое решение. Деплой можно сильно проще сделать, нежели через поднятие VCS.

baverman ★★★
()
Ответ на: комментарий от AlexKiriukha

Насколько давно? Никакого sql незаметно. Я пытался у нас ввести, но шефиня твердолобая отказала по какой-то смехотворной причине.

JackyTreehorn
()
Ответ на: комментарий от JackyTreehorn

Года три или четыре назад. Если не путаю, то там был sql с ID для миграций. Особенно весело было когда два человека одновременно создавали разные миграции, проводили их у себя, а потом мерджили код и матерились. Поэтому и отказались. Возможно сейчас liquibase вырос до хорошего продукта.

AlexKiriukha ★★★★
()

пункт 2 - я веду файл alter.sql.lisp примерно вот с такими командами:
(def-firebird-patch myfirm.2011-10-10
(alter-table 'foo :columns '(bar)))

(def-firebird-patch myfirm.2011-10-11
(fcm create user luser;
))

и т.п.

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

Def-firebird-patch заносит в спец.таблицу, находящуюся в базе, сведения об успешном применении патча. Можно было написать что-нибудь более «точное», например, проверять, что все предыдущие файлы уже выполнены, а следующие - ещё нет.
Всё это делается без большого труда на любом ЯП, например так это могло бы выглядеть на Pascal (я не знаю PHP, но наверняка можно и на php)

unit database_patches;

...

procedure patch_2011_10_11;
begin
check_last_patch('patch_2011_10_10');
begin_patch('patch_2011_10_11');
runSQL('alter table foo add bar int');
end_patch('patch_2011_10_11');
end;

procedure check_db_version;
begin
check_last_patch('patch_2011_10_11'); // меняется при эволюции БД
end;

den73 ★★★★★
()
Ответ на: комментарий от AlexKiriukha

виедл его пару месяцев назадю имо ничего не изменилось

ZuBB ★★★★★
()
Ответ на: комментарий от den73

в одном из предыдущих проектов юзали похожую «схему». достаточно просто и надежно

ZuBB ★★★★★
()

Есть сервер с установленным приложением на PHP/Ruby/Java/C
На этом же сервере поднять Git-сервер

говорят мухи должны быть отдельно от котлет. есть же github/bitbucket для сырцов

ZuBB ★★★★★
()

> Когда нужно будет обновить ПО на сервере, зайти на сервер через SSH и обновиться с этого localhost-репозитария. Как вам такое решение?

зачем? сразу пушишь в продакшн, там стоит хук, который все разворачивает сам.

kelyar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.