Мне еще предстоит найти удовлетворительный способ управления разработкой, сборкой и развертыванием моих приложений Perl. Я хотел бы услышать, как вы решили эту проблему и/или что хотели бы иметь в системе сборки приложений, которой у вас нет.
Просьба описать тип вашего приложения (это веб-приложение, оно выполняется на сервере или связывает его с помощью PAR или PerlApp, чтобы вы могли работать в системах без потерь).
Ключевые вещи, которые должна обеспечить система сборки:
@INC
значением, которое будет использовать соответствующие каталоги.make test
или аналогичную команду.Перекрестная ссылка на Perlmonks.
Там много, что я мог бы написать об этом
Управление библиотеками - я создаю свои собственные версии CPAN только с теми модулями, которые я хочу. В последних версиях App:: Cpan есть несколько функций, таких как опция -j
для загрузки одноразовых конфигураций, чтобы помочь в этом. После этого вы можете распространять его на накопителе большого пальца или компакт-диске, в котором есть все модули, конфигурация CPAN.pm и все остальное, что вам нужно. С небольшим программированием вы создаете run_me
script, чтобы все произошло.
Интеграция Makefile/Build - я не интегрирую Make файлы. Это путь к катастрофе. Вместо этого я тестирую интеграцию с модулем приложения верхнего уровня, который автоматически проверяет все его зависимости. Переключатель -t
для команды cpan полезен для тестирования модуля в текущем рабочем каталоге:
cpan -t.
Существуют различные схемы тестирования взаимодействия, которые вы также можете использовать. Вы устанавливаете PERL5LIB на что-то пустое (только с основными модулями в жестко закодированных каталогах @INC), поэтому cpan
должен установить все с нуля.
Управление версиями - это не имеет большого значения, что вы используете. У большинства вещей есть какой-то экспорт, где вы можете получить все без материалов для управления версиями. Git очень хорошо, потому что в нормальных случаях он имеет минимум загрязнения.
Кросс-платформа - все, о чем я упомянул, прекрасно работает в Windows и Unix.
Single Perl install - эта часть более сложная, и я думаю, что вы ошибетесь. В любое время, когда несколько вещей должны зависеть от одного и того же perl, кто-то собирается испортить это для других. Я определенно рекомендую не использовать систему Perl для разработки приложений, чтобы вы не испортили работу системы. Как минимум, каждое приложение должно установить все неядерные модули в свои собственные каталоги, чтобы они не конкурировали с другими приложениями.
Простота запуска - это просто вопрос программирования.
БОНУС: я не использую Module:: Starter. Это неправильный путь, поскольку вы должны зависеть от того, что Module:: Starter думает, что вам следует делать. Я использую Distribution:: Cooker, который просто берет каталог шаблонов Template Toolkit и обрабатывает их, чтобы предоставить им свой каталог распространения. Вы можете делать все, что вам нравится. Как вы получаете исходные шаблоны, зависит от вас.
Я работаю над довольно маленьким веб-приложением, и мы просто работаем над улучшением нашего развертывания (улучшая его от "тратить день, настраивая все модули, которые нам нужны в Windows, а затем бросаем файлы на него, пока все не работает", так что некоторые улучшения).
У нас есть три вещи, которые нам нужно сделать, чтобы настроить наш сайт:
Module::Starter
, содержащий модуль Config
, который содержит параметры конфигурации всего сайта. При установке этот модуль (используя MakeMaker
PREREQ_PM
, чтобы проверить, что все необходимые нам модули уже установлены). Любые модули, которые не должны быть установлены до того, как этот модуль может быть установлен.Развертывание состоит в том, что я вытягиваю из всех ветвей Git и упаковываю версию. Затем мы можем передать это для тестирования либо локально, либо на экземпляр Amazon EC2. Как только мы будем рады опубликовать, мы либо устанавливаем его поверх последней версии, либо переносим базу данных на экземпляр тестирования, и делаем это новым экземпляром.
Сравнивая это с вашими критериями:
grep
для строк, начинающихся с use
).prove
напрямую.CPAN
, EU::MM
, а другие хорошо работают во всех системах. кажется, стыдно тратить его.Имейте в виду, это действительно простой веб-сайт, нет XS, сложная веб-фреймворк или любой такой. Мы также поддерживали эту настройку только в двух версиях, поэтому нам не хватает опыта в том, как это будет работать, поскольку код становится более сложным, а наши платформы развертывания становятся все более разнообразными. Я бы очень признателен за любые предложения или комментарии в нашей системе.