Имеется приложение на Perl, которое имеет множество зависимостей. Задача - упростить установку зависимостей такого приложения.
Есть несколько подходов к решению данной задачи, но я расскажу лишь про тот вариант, который я использую и он мне нравится больше всего.
Все модули я ставлю с CPAN в локальную директорию пользователя, использую для этого "local::lib".
Предварительно необходимо описать все зависимости приложения в Makefile.PL. Например, файл может выглядеть вот так:
Есть несколько подходов к решению данной задачи, но я расскажу лишь про тот вариант, который я использую и он мне нравится больше всего.
Все модули я ставлю с CPAN в локальную директорию пользователя, использую для этого "local::lib".
Предварительно необходимо описать все зависимости приложения в Makefile.PL. Например, файл может выглядеть вот так:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use strict; | |
use warnings; | |
use ExtUtils::MakeMaker; | |
WriteMakefile( | |
NAME => 'MyApp', | |
VERSION => 0.01, | |
MIN_PERL_VERSION => 5.010, | |
PREREQ_PM => { | |
'Mojolicious' => 2.41, | |
'Mojolicious::Plugin::YamlConfig' => 0, | |
'Mojolicious::Plugin::Recaptcha' => 0.3, | |
'Mojolicious::Plugin::JSUrlFor' => 0.06, | |
'Mojolicious::Plugin::CSRFProtect' => 0.07, | |
'DBI' => 1.38, | |
'DBD::mysql' => 4.016, | |
'Rose::DB::Object' => 0.797, | |
'YAML::Syck' => 1.05, | |
'Locale::Maketext::Lexicon' => 0.82, | |
'Email::Valid' => 0.184, | |
'MIME::Lite' => 0, | |
'Try::Tiny' => 0, | |
'Test::Most' => 0, | |
'Locale::PO' => 0, | |
'Validate::Tiny' => 0.09, | |
'Text::CSV' => 1.21, | |
'List::MoreUtils' => 0.32, | |
'Math::Round' => 0.06, | |
'Mouse' => 0.97, | |
'Log::Log4perl' => 1.28, | |
'File::Slurp' => 0, | |
}, | |
PREREQ_PRINT => 1, | |
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, | |
clean => { FILES => 'MyApp-*' }, | |
test => { TESTS => 't/*.t' }, | |
); |
Процедура установки:
- Копируем код приложения на чистый сервер.
- Устанавливаем и настраиваем "local::lib" (инструкция)
- Устанавливаем "App::cpanminus" в локальную директорию ( возможно придется установить вручную - make, make test, make install ).
- Переходим в папку с приложением и выполняем команду - "cpanm --installdeps ." и ждем пока установятся все зависимости.
5 коммент.:
А как же XS-ы? Вот у меня один из проектов использует XS-модули. Разработку я веду под FreeBSD, а на боевом сервере - CentOS.
А в чем проблема с XS? XS модули ставятся с CPAN без проблем. Конечно должен быть компилятор на сервере. Ну придется сделать предварительно yum groupinstall "Development tools", но это ж не проблема.
Мне почему-то показалось, что речь идет о копировании модулей на сервер. Моя ошибка.
#!/bin/bash
depend=( LWP XML::SAX XML::Simple Digest::MD5 Net::CUPS Net::IP Net::SNMP Proc::Daemon ExtUtils::MakeMaker Net::SSLeay Proc::PID::File Crypt::SSLeay )
for i in "${depend[@]}"
do
#export PERL_MM_USE_DEFAULT=1 && cpan -i ${i}
export PERL_MM_USE_DEFAULT=1 && perl -MCPAN -e "install ${i}"
done
А?
2des:
Зачем ??? o_O
У меня в каждом проекте есть Makefile.PL, который описывает все зависимости и , ИМХО, такой подход более правильный по следующим причинам:
1. Большинство разработчиков умеют писать мейкфайлы, а кто не умеет всегда может посмотреть в перлдок
2. Мейкфайл содержит много дополенительной инфорации, кроме зависимостей.
3. Очень желателен для запуска тестов - "make test". Особенно, когда тесты прогоняются сторонним CI(Continuous Integration)-инструментом
4. Нужен для развертывания приложений во всяких клауд-хостингах.
5. Мейкфайл более кроссплатформенен чем bash-скрипт
6. ...
Отправить комментарий
Не забудьте добавить себя в постоянные читатели и включить уведомления о новых комментариях, либо воспользуйтесь RSS каналом ;)