Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСофт и программы

Как держать несколько версий одной программы на машине

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
22 декабря, 17:47первое сообщение

Обновил парсер до свежей сборки, и половина старых заданий перестала разбирать разметку: у них поменялся синтаксис правил.

Откатываться целиком не хочу, в новой версии как раз чинили то, что мне нужно. Хочу держать обе рядом: старые задания на старой, новые на свежей.

Пока сделал две папки и два скрипта запуска, выглядит топорно. Есть человеческий способ?

ferrum
ferrum
Участник
сообщений 660
с сен
1 мая, 08:04#2

Способ ровно такой же, только через ссылку. Папки версий рядом, отдельная ссылка смотрит на текущую:

/opt/parser/1.8.4/
/opt/parser/2.3.1/
/opt/parser/current -> 2.3.1

В PATH прописан current, переключение занимает одну команду ln -sfn. Задания при этом зовут либо current, либо версию поимённо.

byteflow
byteflow
Новичок
сообщений 225
с фев, второй сезон
8 октября, 11:21#3

Разверну мысль ferrum, потому что на ссылке всё не заканчивается.

Версия программы тянет за собой окружение: библиотеки, настройки, кэш, иногда базу. Старый парсер держит настройки в ~/.parser, новый лезет туда же и молча мигрирует формат. Один запуск свежей сборки, и старая уже не читает свой же профиль.

Поэтому окружение разносится вместе с программой:

run_parser() {
  v="$1"; shift
  PARSER_HOME="/opt/parser/data/$v" \
  XDG_CACHE_HOME="/opt/parser/cache/$v" \
  "/opt/parser/$v/bin/parser" "$@"
}
run_parser 1.8.4 --task staryy.conf
run_parser 2.3.1 --task novyy.conf

Для языков есть готовые менеджеры версий, pyenv, nvm, asdf, и они делают ровно то же самое: подкладывают свой каталог в PATH и держат окружения врозь. Когда версий больше трёх и они с разными зависимостями, я ухожу в образы: тег образа и есть версия, а окружение внутри физически не пересекается с соседним.

Егор Пастухов
Егор Пастухов
Новичок
сообщений 78
с июл, второй сезон
15 марта, 14:38#4

а образы не тяжело для парсера? он же не сервис

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
22 августа, 17:55#5
byteflow: один запуск свежей сборки, и старая уже не читает свой же профиль

Так у меня и произошло, теперь понятно. Профиль общий, свежая сборка его переписала, старая после этого ругается на формат.

Максим Юрьев
Максим Юрьев
Знаток
сообщений 1720
с апр
1 января, 08:12#6

Егор Пастухов, для одной машины образы избыточны, вы правы. Под Windows живёт тот же приём на переносных папках плюс обёртка на cmd:

@echo off
set VER=%1
set PARSER_HOME=D:\parser\data\%VER%
shift
"D:\parser\%VER%\parser.exe" %*

Кладёте её в PATH под именем p.cmd и зовёте p 2.3.1 --task novyy.conf. Ярлыки на рабочем столе делаете под каждую версию отдельно, с разными иконками, чтобы глазами не путать.

Дарья Смолина
Дарья Смолина
Участник
сообщений 340
с дек
8 июня, 11:29#7

У нас обе версии крутятся параллельно на одном сервере, старая добивает архив заданий, свежая работает по новым.

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

ferrum
ferrum
Участник
сообщений 660
с сен
15 ноября, 14:46#8

Дарья Смолина, а конфиги заданий вы как разводите? У нас на этом больше всего путаницы.

linuxvsem
linuxvsem
Участник
сообщений 830
с июл
22 апреля, 17:03#9

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

Старые задания доживают на 1.8.4, новые пишу под 2.3.1. За неделю ни одной перепутанной сборки, профиль больше никто не переписывает.