За последние 24 часа нас посетили 34155 программистов и 1709 роботов. Сейчас ищут 766 программистов ...

Система обновлений своего ПО на основе PHP! Как реализовать?

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 14 окт 2007.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Столкнулся с проблемой поддержки своих приложений - т.е. обновления версий различных модулей и компонентов системы. Раньше такие вопросы решались обычной ручной заменой файлов, но сейчас количество пользователей системы стало увеличиватся (отсюда увеличение хостов на которых работает система), а потому такие (ручные) методы отнимают кучу времени (например, пропатчить очередной модуль на десятках хостах становится утомительным) и порождают ошибки!
    Единственным решением вижу создание системы автоматических обновлений (на подобие Windows Update :lol: )
    Собственно идея проста - организовать сервер-обновлений (на самом деле обычный хост-сайт) раздающий заплатки всем подключившимся клиентам через, ну например HTTP (вызов RPC). Клиент запрашивает новые версии, сверяет с тем что у него есть, и если появилось что-то новое, делает запрос на получение пакета, скачивает себе его, а после устанавливает по определенному сценарию!
    Все это хорошо в теории, но как быть в реализации... Может перед кем-нибудь вставали такие задачи или кто-нибудь уже делал подобное?? Поделитесь пжалуйста опытом господа! :)
     
  2. Anonymous

    Anonymous Guest

    Если расковырять чужое — e2.ilyabirman.ru =)
     
  3. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    как-то переделывал для внутрених нужд давно забытый phpcollab, так там был файлик с версией и скрипт при входе админа лез на сайт разработчиков, через file_get_contents() брал последнюю версию и если существовала более новая, то выводил сообщение, мол пора обновляться
     
  4. Anonymous

    Anonymous Guest

    имхо, лучше хэшик слать... %)
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну я только как оно было говорю ;)
     
  6. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Просто система у нас довольно молодая, а потому не исключены частые обновления и не только файлов, а иногда и структуры таблиц БД (но это редко конечно)!
    Сейчас, подумал в голову пришел следующий алгоритм:

    1) Система на клиентском хосте через определенные промежутки (время обновлений) запрашивает версию последнего билда системы с сервера обновлений. Получает и сверяет со своей версией, если есть более свежая версия переходит к п.2, если нет успокаивается на время :)
    2) Обращается к серверу обновлений за патчем при этом указывая свою текущую версию. Сервер обновлений принимая во внимание версию клиента - находит все измененные файлы, а также записывает (если есть) измененные структуры таблиц БД (в виде SQL). Упаковывает все это в архив и отдает клиенту.
    3) Клиент скачивает, распаковывает, достает из распакованного архива файл сценария установки, считывает все прописанные там имена новых файлов, а также имена измененных таблиц, делает бэкап все этого (для последующего отката если вдруг...), а дальше запускает интерпритатор файла сценария установки и выполняет обновление по указанному в нем алгоритму.
    4) Если в процессе обновления возникают проблемы, или же после обновления система некорректно работает, клиент может сделать откат из ранее сделанного бэкапа!

    Да такая схема непроста.. но думаю можно попробовать.. что скажите?
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    уж лучше бэкап автоматически делать, клиенты — создания странные
     
  8. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Тут в качестве клиента - я подразумевал просто клиентскую версию нашей системы - т.е программу!
    Роль клиента как такового (т.е. пользователя системы) может сводится к наблюдению за всем этим процессом и нажатию кнопочки ОТКАТ в случае чего :)
    Однако наличие ручного режима обновления я думаю все равно не помешает, т.е. будет два режима: ручной и автоматический. В ручном можно будет выбирать что обновлять а что нет. Правда при этом наверное надо будет учитывать еще и зависимости компонентов и модулей системы, и разделить все обновления на обновления системы (важные) и обновления отдельных компонентов (простые версионные обновления) - как просто прилагающиеся (влияющие только на сам компонент)
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Если обновляете - то всё. Оно вам надо делать ещё и систему зависимостей? :D
     
  10. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    а если какой нибуть клиент-человек поковырялся в коде (пусть даже хорошо поковырялся, с умом), уже далеко не факт что автоматика сработает как надо (я бы даже сказал что скорее всего не сработает), а даже если и сработает, то получится не то что надо. Вобщем все это крайне сложно.
    Если уж делать автообновление, то перед началом такого обновления проверять контрольную сумму обновляемого файла. если она не сходится с нужной (для этой версии) - то никакого автообновления.
    С базой данных тоже слишком много зависимостей.
     
  11. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    теоретически сделать можно, но практически ОЧЕНЬ много получится тупого и неблагодарного кода типа if else.
     
  12. S.t.A.M.

    S.t.A.M. Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    1.041
    Симпатии:
    0
    Мне кажется, если клиент-человек смог с умом поковырятся в ходе то ума хватит и на то, что бы файлы со своими правками резервно сохранить а после обновления востановить, а разработчику обэтом ИМХО заботиться не стоит!
    и обновлять весь движок разом, а не по модулям!
     
  13. orange

    orange Активный пользователь

    С нами с:
    10 май 2007
    Сообщения:
    25
    Симпатии:
    0
    в typo3 такая система реализована, только там помоему обновление отдельных компонентов только, или даже только добавление, точно не помню
     
  14. the.Economist

    the.Economist Активный пользователь

    С нами с:
    8 окт 2006
    Сообщения:
    39
    Симпатии:
    0
    Адрес:
    СПб/Москва
    enshtein, сейчас занимаюсь тем же самым. По скромным прикидкам, 1500 строк и весь скрипт. Половина написана и не скажу, что есть какие-то трудности. С учетом того, что пишется система обновления для клиентских машин, т.е. proxy, разбиение на пакеты, обрывы связи и прочие радости жизни.
    А если обновлять на серверных машинах, то еще проще должно быть.