Как управлять изменениями схемы базы данных в выпусках проекта с открытым исходным кодом

9

Я управляю веб-приложением PHP / MySQL с открытым исходным кодом, используемым несколькими школами K-12 и некоторыми колледжами. Я также единственный разработчик проекта. Хотя раньше это было чуть больше, чем исходная загрузка приложения, которое размещает мой работодатель, в течение прошлого года я работал над тем, чтобы превратить его в «настоящий» проект с открытым исходным кодом, с документацией, нумерованными выпусками, общедоступными журналами изменений и т. Д.

Я надеюсь улучшить процесс обновления, и одна из потенциально болезненных областей (особенно для школ, испытывающих недостаток в ИТ-знаниях), заключается в изменениях схемы базы данных между выпусками. Они не случаются часто или радикальные изменения, но я был бы признателен за предложения по этому процессу.

В настоящее время я поддерживаю базовый сценарий установки SQL для настройки базы данных при новой установке. Это включает в себя полную схему для текущего выпуска; никаких дальнейших действий не требуется для новой установки. Изменения, которые происходят между выпусками, хранятся в upgrade-$releasever.sqlсценариях, и для всех пропущенных выпусков необходимо постепенно запускать все сценарии обновления.

Скрипты оболочки не подходят, потому что многие из наших пользователей работают на хостах без доступа к оболочке. Из-за других приоритетов сложный скрипт установки / обновления на основе браузера PHP вряд ли будет реализован. Однако я хотел бы сделать что-то с помощью PHP-скрипта на основе браузера, чтобы упростить обновления. Предложения о том, как подойти к нему?

Майкл
источник

Ответы:

3

В моем проекте есть файл update.php, который пользователь запускает через свой браузер после установки новой версии программного обеспечения. Этот скрипт обновления проверяет номер версии базы данных, который хранится в таблице в активной базе данных, и выполняет любые операции по изменению базы данных, которые приведут эту схему к последней версии, которая включает в себя обновление этого номера версии базы данных.

pyasi
источник
Я просмотрел ваш скрипт upgrade.php, и это, кажется, то, что я имел в виду. Спасибо.
Майкл
2

У Drupal CMS есть интересное решение вашей проблемы. Я предлагаю взглянуть на Drupal в целом, если вы разрабатываете веб-решения с использованием PHP. Это моя любимая PHP CMS, и я буду достаточно предвзятым, чтобы сказать, что она лучшая. ;)

Drupal предлагает довольно сложную оболочку взаимодействия с базой данных. Это позволяет абстрагировать фактический тип базы данных от разработчика модуля, так что вам все равно, работает ли на сервере PostgreSQL, MySQL и т. Д. Вы также можете создать свой собственный интерфейс. Каждый модуль должен предоставить файл module.install, который содержит hook_schemaи hook_install. hook_schemaиспользуется для объявления схемы таблицы для модуля, при этом hook_installвыполняется процедура установки. Архитектура также поддерживает понятие обновлений, поэтому, если у пользователя уже установлен модуль, вызываются правильные хуки обновлений и позволяют легко обновлять схему таблицы.

Посмотрите: http://drupal.org/node/146862 Даже если Drupal не для вас, я уверен, что вы можете узнать что-нибудь из их архитектурных решений.

СНЕГ
источник
0

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

Мы также сохранили все скрипты обновления в этой папке. Таким образом, мы могли бы перенести клиента из версии x в версию y.

Это не лучший метод ... но он работал для нас.

Майкл Райли - AKA Gunny
источник
Если я понимаю, это звучит похоже на то, как я сейчас это делаю - заставляю своих пользователей самим запускать сценарии обновления и в правильном порядке.
Майкл