Pull to refresh

Comments 25

Установка — ОК! А как быть с обновлением решений с помощью такой поставки?
Кажется, это вопрос на ещё одну статью!

В целом, с данным способом поставки всё сводится к написанию небольшого модуля, который занимается проверкой обновлений, и который будет скачивать, импортировать и компилировать новые классы. И в данном случае все необходимые настройки сделает уже новый импортированный Installer.

Вот небольшая сводка того, что уже есть по этой теме на сегодня:

  1. В Caché WEB Terminal, при выполнении команды /update, на сервере вызывается метод Update. Он загружает из сети XML указанной версии, а затем импортирует и компилирует загруженные классы;
  2. В проекте DeepSeeWeb так же есть метод, загружающий XML последнего релиза с GitHub;
  3. Есть утилита для continuous-обновления приложений напрямую из репозитория, если там хранятся XML — GitHubUpdater.
Ну то есть вот это Update уже работает не через Projection механизм, а как-то еще, правильно?
Само обновление (процесс загрузки классов из сети) — да. Нужно дополнительно написать код, который будет заниматься обновлением: скачает и импортирует XML (или *.cls с 2016.1) файлы. Проекции — это всего лишь возможность выполнить что-то во время компиляции.
А вот как кастомизацию установки делать? Куда поставилось-туда поставилось? ) Если вдруг по условиям установки требуется что-то спросить у пользователя как это здесь?
Исследовал как-то, что read в случае с проекциями, к сожалению, не работает. Так что чуть ли не единственным вариантом остаётся просить пользователя задавать какой-то глобал перед установкой. А при отсутствии глобалов устанавливать приложение "по-умолчанию", что, в принципе, для большинства пользователей подходит.
Ну я бы тут не read пользовался, а вызывал бы UI, может средствами стандартного CSP…
Или так: сначала ставишь нечто, что позволяет организовать простой диалог с пользователем, а потом уже используешь эту "диалоговую" тулзу для кастомизации параметров.
Это нереально полезно открывать во время установки окно браузера с настройками приложения. Если знает кто код такой, и это правда возможно, было бы любопытно узнать как.
ClassMethod RunPage(Url As %String = "http://intersystems.ru")
{
    #Include %occOptions
    Set Browser = $s($$$isWINDOWS:"start", $$$isUNIX:"x-www-browser", 1:"x-www-browser")
    Set Command = Browser _ " " _ Url
    Do $ZF(-1, Command)
}

Откроет веб-страницу в браузере по умолчанию.

Откроет на сервере, и то не факт, что касается Windows.
Откроет на сервере
Да. Но как это ограничение обойти не представляю.
и то не факт, что касается Windows.
Работает на Windows XP.
а никак не обойти $zf работает на сервере и все тут.
на XP да, на чем то новее не будет, точнее на win7 с бубном можно еще сделать, нужно разрешить интерактивный режим
так на win8,10 уже все
так что лучше ничего интерактивного не запускать на сервере.
У меня на 10ке работает. При вызове из терминала пользователь будет интерактивный, а не тот, кто службу запустил.
В студии этот же пользователь, но страницу не открывает.
Мне кажется, тут надо разделять место импорта: если импорт пакета установки делается через drag-n-drop в студию, речь идет о клиенте и винде.
А если через импорт классов в панели управления — это уже точно сервер.
Если это упростить и свести к тому, что и в случае Студии и случае Панели управления будет открываться некое приложение в браузере (т.е. на сервере), то можно предустановить сначала некую простенькое приложение, которое сможет динамически формировать диалоговый UI для устанавливаемых пакетов.
Что думаете?
Если идет импорт через студию это можно сделать, можно отловить этот процесс, и возможно даже запустить в студии диалог
но сделать это можно только через класс системы контроля версий
там есть действие на импорт файла, и при импорте можно отобразить web-страницу в студии, и тут уже можно как-нибудь придумать и вытянуть все необходимое из загружаемого файла и после сделать установку по настройкам введенным с такой страницы
проблема в том что сервер уже должен быть настроен на подобнове поведение, и в том что пока нельзя установить несколько разных классов контроля версий без хитрого переделывания
Ребята, это все ужасно. Overdesign, over complicated.
  1. Если надо параметризовать через аргументы или с интерактивом установку чего-то, то используем %Installer.Manifest и генерируемую функцию вызываем из командной строки с аргументами или спрашивая о них.
  2. Если есть возможность инсталлироваться никого не спрашивая, то используем проекции. Если надо что-то спросить, см. пункт 1

P.S.
%Installer.Manifest хорошо интегрируется в пользовательские установщики (которые могут быть с GUI и похожими пирогами).
Ребята, это все ужасно.

Что ж тут ужасного? мне нравится этот способ установки. "Ужасного" в нем только то, что это похоже на бэкдор: импортировал пакет с классами, а заодно тебе поставилось все что угодно.
Как можно улучшить: добавить в панель управления Caché ссылку: Установка приложений, которая ожидает импорт файла с пакетом и предлагает еще и API для интерактивного диалога а еще и в одно всем известное место кладет логи и ошибки установки.
и тут пора вспомнить про CPM, развивая его и внедряя в поставку Caché, можно будет такого добиться
С этим невозможно не согласиться. Пора нам, Дима, тряхнуть стариной, и таки выпустить CPM в жизнь!
/me ушёл писать модуль leftpad для Caché ObjectScript
Напиши! И сразу позовем alizar сделать пост)
Еще одна штука: неплохо бы после инсталляции видеть логи, что куда поставилось и были ли ошибки. Куда-то в стандартный лог пишется? Если да, то в какой? в cconsole.log или еще куда?
По-умолчанию пишется на текущее устройство.

Ну это если делать write. А можно поиспользовать этот интерфейс логгера для указанного в статье способа установки? (т.е. без %Installer)?
Или было же что-то, чтобы писать в cconsole.log
А можно поиспользовать этот интерфейс логгера для указанного в статье способа установки?

Можно написать сам логгер и вызывать его.

Или было же что-то, чтобы писать в cconsole.log

Это из коробки есть (документация):
Set Status = ##class(%SYS.System).WriteToConsoleLog(Message, Flag, Severity) 
Sign up to leave a comment.