Столкнулся с проблемой поддержки своих приложений - т.е. обновления версий различных модулей и компонентов системы. Раньше такие вопросы решались обычной ручной заменой файлов, но сейчас количество пользователей системы стало увеличиватся (отсюда увеличение хостов на которых работает система), а потому такие (ручные) методы отнимают кучу времени (например, пропатчить очередной модуль на десятках хостах становится утомительным) и порождают ошибки! Единственным решением вижу создание системы автоматических обновлений (на подобие Windows Update :lol: ) Собственно идея проста - организовать сервер-обновлений (на самом деле обычный хост-сайт) раздающий заплатки всем подключившимся клиентам через, ну например HTTP (вызов RPC). Клиент запрашивает новые версии, сверяет с тем что у него есть, и если появилось что-то новое, делает запрос на получение пакета, скачивает себе его, а после устанавливает по определенному сценарию! Все это хорошо в теории, но как быть в реализации... Может перед кем-нибудь вставали такие задачи или кто-нибудь уже делал подобное?? Поделитесь пжалуйста опытом господа!
как-то переделывал для внутрених нужд давно забытый phpcollab, так там был файлик с версией и скрипт при входе админа лез на сайт разработчиков, через file_get_contents() брал последнюю версию и если существовала более новая, то выводил сообщение, мол пора обновляться
Просто система у нас довольно молодая, а потому не исключены частые обновления и не только файлов, а иногда и структуры таблиц БД (но это редко конечно)! Сейчас, подумал в голову пришел следующий алгоритм: 1) Система на клиентском хосте через определенные промежутки (время обновлений) запрашивает версию последнего билда системы с сервера обновлений. Получает и сверяет со своей версией, если есть более свежая версия переходит к п.2, если нет успокаивается на время 2) Обращается к серверу обновлений за патчем при этом указывая свою текущую версию. Сервер обновлений принимая во внимание версию клиента - находит все измененные файлы, а также записывает (если есть) измененные структуры таблиц БД (в виде SQL). Упаковывает все это в архив и отдает клиенту. 3) Клиент скачивает, распаковывает, достает из распакованного архива файл сценария установки, считывает все прописанные там имена новых файлов, а также имена измененных таблиц, делает бэкап все этого (для последующего отката если вдруг...), а дальше запускает интерпритатор файла сценария установки и выполняет обновление по указанному в нем алгоритму. 4) Если в процессе обновления возникают проблемы, или же после обновления система некорректно работает, клиент может сделать откат из ранее сделанного бэкапа! Да такая схема непроста.. но думаю можно попробовать.. что скажите?
Тут в качестве клиента - я подразумевал просто клиентскую версию нашей системы - т.е программу! Роль клиента как такового (т.е. пользователя системы) может сводится к наблюдению за всем этим процессом и нажатию кнопочки ОТКАТ в случае чего Однако наличие ручного режима обновления я думаю все равно не помешает, т.е. будет два режима: ручной и автоматический. В ручном можно будет выбирать что обновлять а что нет. Правда при этом наверное надо будет учитывать еще и зависимости компонентов и модулей системы, и разделить все обновления на обновления системы (важные) и обновления отдельных компонентов (простые версионные обновления) - как просто прилагающиеся (влияющие только на сам компонент)
а если какой нибуть клиент-человек поковырялся в коде (пусть даже хорошо поковырялся, с умом), уже далеко не факт что автоматика сработает как надо (я бы даже сказал что скорее всего не сработает), а даже если и сработает, то получится не то что надо. Вобщем все это крайне сложно. Если уж делать автообновление, то перед началом такого обновления проверять контрольную сумму обновляемого файла. если она не сходится с нужной (для этой версии) - то никакого автообновления. С базой данных тоже слишком много зависимостей.
теоретически сделать можно, но практически ОЧЕНЬ много получится тупого и неблагодарного кода типа if else.
Мне кажется, если клиент-человек смог с умом поковырятся в ходе то ума хватит и на то, что бы файлы со своими правками резервно сохранить а после обновления востановить, а разработчику обэтом ИМХО заботиться не стоит! и обновлять весь движок разом, а не по модулям!
в typo3 такая система реализована, только там помоему обновление отдельных компонентов только, или даже только добавление, точно не помню
enshtein, сейчас занимаюсь тем же самым. По скромным прикидкам, 1500 строк и весь скрипт. Половина написана и не скажу, что есть какие-то трудности. С учетом того, что пишется система обновления для клиентских машин, т.е. proxy, разбиение на пакеты, обрывы связи и прочие радости жизни. А если обновлять на серверных машинах, то еще проще должно быть.