Каков наилучший способ создания сценария обновления PHP / MySQL для разработчика программного обеспечения? - PullRequest
7 голосов
/ 21 марта 2011

Я разработчик программного обеспечения PHP и ищу лучшее решение, чтобы обойти эту проблему, которая у меня есть. Я создаю сценарий, который в будущем будет иметь новые выпуски, включающие новые функции, исправления ошибок и т. Д. Я знаю, как вносить изменения в код в сценарии обновления, однако я разрабатываю сценарий, который использует MySQL для хранения данных в нескольких таблицах. .

Теперь вот вопрос, я выяснил, как создать сценарий установки для первоначального выпуска, однако, каково лучшее решение / метод создания сценария обновления, который может обновить любую предыдущую версию до последней версии? версия? В последней версии есть новые таблицы MySQL (не проблема), однако она также меняет структуру базы данных (новые столбцы, удаляют столбцы и т. Д.). Я создам сценарий ниже, чтобы лучше представить, что меня беспокоит.

v0.1.0 - Первый выпуск

v0.1.1 - добавлена ​​новая таблица базы данных и некоторые поля добавлены в структуру таблицы

v0.2.0 - добавлены новые поля в разные таблицы

Меня беспокоит обновление v0.1.0> v0.2.0, потому что между двумя версиями произошли изменения.

ОБНОВЛЕНИЕ Возможно, я мог бы упомянуть, что я использую GitHub в качестве моей VCS только для кода. Все изменения кода сохраняются там, и в сценарии установки или обновления для изменений кода я просто планирую перезаписать текущие файлы пользователя, поскольку у них не должно быть никаких данных в файлах классов / функций.

Ответы [ 3 ]

9 голосов
/ 21 марта 2011

По моему опыту, лучшим подходом является создание таблицы версий в MySQL, которая включает номер версии приложения вместе с любыми запросами, которые изменяют структуру базы данных.Итак, по сути:

CREATE TABLE versions (
    app_version DOUBLE NOT NULL,
    query TEXT,
    created TIMESTAMP NOT NULL 
);

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

SELECT query FROM versions WHERE app_version > {$initialAppVersion} AND app_version <= {$destinationAppVersion} ORDER BY created ASC;

В PHP:

foreach ($resultset AS $row) {
    $stmt = $db->prepare($row['query']);
    try {
       $stmt->execute();
    } catch (Exception $e) { /* handle exception */ }
}
1 голос
/ 21 марта 2011

Другое предложение:

Некоторые ORM, такие как Propel и Doctrine , позволяют автоматически создавать такие сценарии миграции.

Проверьте, например:

1 голос
/ 21 марта 2011

Вы можете сохранить текущую версию схемы, в которой они находятся.

Для сценария обновления необходимо проверить его на предыдущую версию, прежде чем он продолжит делать какие-либо обновления.Это предотвратит пропуск или пропуск обновлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...