Я управляю веб-приложением PHP / MySQL с открытым исходным кодом, используемым несколькими школами K-12 и некоторыми колледжами. Я также единственный разработчик проекта. Хотя раньше это было чуть больше, чем исходная загрузка приложения, которое размещает мой работодатель, в течение прошлого года я работал над тем, чтобы превратить его в «настоящий» проект с открытым исходным кодом, с документацией, нумерованными выпусками, общедоступными журналами изменений и т. Д.
Я надеюсь улучшить процесс обновления, и одна из потенциально болезненных областей (особенно для школ, испытывающих недостаток в ИТ-знаниях), заключается в изменениях схемы базы данных между выпусками. Они не случаются часто или радикальные изменения, но я был бы признателен за предложения по этому процессу.
В настоящее время я поддерживаю базовый сценарий установки SQL для настройки базы данных при новой установке. Это включает в себя полную схему для текущего выпуска; никаких дальнейших действий не требуется для новой установки. Изменения, которые происходят между выпусками, хранятся в upgrade-$releasever.sql
сценариях, и для всех пропущенных выпусков необходимо постепенно запускать все сценарии обновления.
Скрипты оболочки не подходят, потому что многие из наших пользователей работают на хостах без доступа к оболочке. Из-за других приоритетов сложный скрипт установки / обновления на основе браузера PHP вряд ли будет реализован. Однако я хотел бы сделать что-то с помощью PHP-скрипта на основе браузера, чтобы упростить обновления. Предложения о том, как подойти к нему?
У 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 не для вас, я уверен, что вы можете узнать что-нибудь из их архитектурных решений.
источник
Мы сделали это путем создания папок версий. Мы поместили все сценарии базы данных в эту папку. Когда пришло время рассказать об этом новому клиенту, они получили последнюю версию.
Мы также сохранили все скрипты обновления в этой папке. Таким образом, мы могли бы перенести клиента из версии x в версию y.
Это не лучший метод ... но он работал для нас.
источник