September 28th, 2006

breakfast

Реинкарнации "веб-движков" в программные продукты посвящается...

Правило 0: Установленные скрипты != Дистрибутив

Даже если вы имеете дело с некомпилируемым языком, дистрибутив не должен быть прямой копией рабочей папки. Кроме хостонезависимых вещей (написанной в соответствии с логикой интерпретатора последовательностей команд), есть и binding points, которые просто не имеют смысла в отрыве от конкретной среды, но без которых не заведется софт. Collapse )

Правило 1: Binding points должны быть локализованы в отдельные файлы. И если платформно-независимый код в процессе установки просто копируется/линкуется, то binding points генерятся на месте из шаблонов, с использованием данных, полученных перед инсталляцией от процедуры configure. Collapse )


Правило 2: Developer suit -- набор инструментов, с помощью которого вы превращаете рабочий набор скриптов в дистрибутив (установочный либо пакет апдейтов)  -- это отдельный пакет, а отнюдь не папка в основном дистрибутиве.  Collapse )


Правило 3: В CVS должны лежать не копии рабочих скриптов, а сгенеренные с помощью developer suit пакеты.
На каждый новый релиз в cvs должны попадать --- 1) сырцы, позволяющие собрать и поставить новую версию продукта с нуля 2) сырцы, позволяющие накатить/отменить апдейт работающего продукта до новой версии.

Правило 4: Контроль версий нужен не только разработчикам но и на продакшене.
Поэтому не изобретайте велосипед а посмотрите в сторону dpkg/rpm. Как вы понимаете, собираться данному dpkg/rpm лучше бы на целевой машине из предоставленных вами сырцов (вашего дистрибутива) по цели build-dpkg/ build-rom. Сюда же кстати и контроль внешних софтверных зависимостей логично прикручивается (хотя и на этапе configure он не помешает).


PS Вышеизложенное прошу рассматривать не как занудство, а как попытку обобщения мыслей для локального developer agreement. Ибо даже когда смотришь на некоторые солидные веб-движки, дистрибутив которых создан по принципу "скопируйте, переименуйте, выставьте права 777, залинкуйте /bin/rm в /cgi-local/, помолитесь и зайдите браузером в скрипт /myconfig2.php" -- пробивает трепет.