Как правильно офрмлять пакеты обновлений

#1 24 сентября 2015 в 20:55
Как оформить установщик дополнения в документации описано. Но как быть с обновлениями? Логично, чтобы инсталер и обновление были одним пакетом и уже под катом определялось новая это установка или обновление.
#2 24 сентября 2015 в 22:21
По факту для чистой установки и для апгрейта папка package может быть идентичной (файлы просто перезапишутся для старой версии). А вот install.sql должен понимать что ему делать...
В целом, думаю, вполне реализуема концепция "умного пакета установки" 2 в 1 smile
#3 24 сентября 2015 в 22:31
Ну да, так оно и есть, файлы заменяются. Вот только файлу install.sql как объяснить, что он должен делать. Хорошо бы чтобы при установке скрипт проверял имеется ли уже данный пакет на сайте или нет. И если имеется, то выполнял бы уже не install.sql, а например upgrate.sql
Вот только возможно уже есть какое решение в системе… правда я его не смог проследить, рано мне еще себя считать гуру php. Поэтому спрашиваю, может кто знает?
#4 24 сентября 2015 в 22:34
И кстати, на сколько я понял проверка существования дополнения вообще не производится. Т.е. можно одно и тоже дополнение установить несколько раз. И оно несколько раз запишется в БД, только с разным ID соответственно.
#5 24 сентября 2015 в 22:52
При беглом осмотре, допиливать вроде здесь ..\system\controllers\admin\actions\install_finish.php
Pull request писать сюда. Уверен фича будет очень удобна для разработчиков, чтобы не собирать по несколько пакетов на обновление.
#6 25 сентября 2015 в 09:26
Тут есть пример файла обновлятора. Он тоже называется и выглядит как инсталятор. Поэтому в нашем файле install.php инсталятора, можно сделать запрос в БД для выяснения есть ли компонент с таким именем и какая у него версия. Затем используя функцию importDump( 'путь до файла sql' ) из файла cmsDatabase выполнить запрос в БД. Если нет компонента, дампим install.sql если есть и версия ниже нашей, дампим update.sql. Если есть и такая же версия, то просто меняем файлы.

И оно несколько раз запишется в БД, только с разным ID соответственно.

Иван Шкута
Как вариант можно прописать в файле sql
  1. DELETE FROM `{#}controllers` WHERE `name` = 'имя' AND `author` = 'автор';
  2. INSERT INTO `{#}controllers` (`title`, `name`, `is_enabled`, `options`, `author`, `url`, `version`, `is_backend`) VALUES
  3. ('Заголовок, 'имя', 1, '', 'автор', 'http://instantcms.ru/users/автор', 'версия', 1);
Что касается замены файлов при обновлении, то не всегда можно делать замену всех файлов автоматически (например файл manifest.php, где объявлены хуки). Ведь нам неизвестно, были ли правки данного файла или нет (например пользователь сам или другой разработчик уже внесли свои коррективы в этот файл). Поэтому если не было обновлений данного файла в нашем компоненте, то его желательно исключить из инсталятора данного обновления. Поэтому надо делать два архива отдельно, один для установки, другой для обновления, или в одном архиве две папки, типа packages и packages_update.
и при установке определять какой пользоваться.
#7 25 сентября 2015 в 10:17
Loadырь, правильно говорит, install.php вам на что? В функции install_package() производите все проверки, потом добавляете/изменяете/удаляете что необходимо. Все запросы к базе можно проводить прямо в коде.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.