Как использовать perlbrew для управления установками perl, предназначенными для веб-приложений?
Я использую perlbrew для управления несколькими версиями perl на ноутбуке Linux Fedora. Я использовал его с большой пользой для запуска сценариев командной строки, в основном используя App::cmd.
Теперь я хочу перейти к запущенным веб-приложениям, написанным с помощью CGI::Application, используя разные perls, установленные в моем $HOME
. Я знаком с запуском веб-приложений Perl в $HOME
с помощью Apache user_dir
или созданием виртуальных хостов, но я не могу придумать чистый способ интеграции этого и perlbrew управляемых perls. В частности, мне нужна помощь в понимании и поиске ответов на эти вопросы:
- Как установить mod_perl под perlbrew?
- Предполагая, что это сделано, как мне настроить свой VirtualHost так, чтобы он подбирал правильный perl, который является текущим?
- Если это невозможно, (что я сомневаюсь), я могу хотя бы использовать локальные установки для запуска vanilla CGI?
Благодарим вас за внимание.
Ответы
Ответ 1
Я не думаю, что это полезно для perlbrew, который перемещается по символическим ссылкам в свой собственный каталог. Трюк - это переключение модуля mod_perl. Помните, что mod_perl будет бинарно-несовместимым между основными версиями perl и вам придется скомпилировать его с apache для каждой версии perl (и apache), которую вы хотите использовать.
perlbrew действительно делает для вас две большие вещи:
- Устанавливает perl, что тривиально легко сделать самостоятельно.
- Переключает символические ссылки, поэтому
perl
- это любая версия, которую вы хотите.
Если вы откажетесь от этого последнего, perlbrew на самом деле не так много для вас. Я не думаю, что функция symlink особенно ценна.
Я думаю, что perlbrew отлично подходит для того, что есть, но когда вы начинаете делать что-то за пределами своей ограниченной сферы, это время не использовать. Он должен быть инструментом, чтобы сэкономить вам некоторое время и головную боль, поэтому, если он не достигнет этой цели, это не правильный инструмент для вашей ситуации.
В этой ситуации, когда я поддерживаю одно большое веб-приложение, я предоставляю ему собственную установку perl, которую я не позволяю использовать что-либо еще.
По другим вопросам:
-
markdown placeholder
-
Вам не нужно настраивать содержимое VirtualHost
. Если вы используете mod_perl, perl уже там, и вы не можете выбрать perl. Если вы используете материал CGI, вы указываете perl на линии shebang. Вам нужно будет убедиться, что apache подбирает правильные библиотечные каталоги, но я думаю, что это касается перлов. Возможно, вам придется использовать SetEnv
или что-то подобное в вашем httpd.conf.
-
Для ванильного CGI просто указывайте на правый (символический) путь для любой версии perlbrew по умолчанию. Программа CGI будет использовать только любой perl, на который указывает путь.
Ответ 2
См. brian d foy для ответа, почему бы не ожидать использования perlbrew для переключения между версиями mod_perl. Я также ожидаю, что вам потребуется запустить несколько серверов Apache, если вам нужно несколько разных версий Perl в mod_perl.
Однако использование perlbrew в качестве простого способа создания Perl - это ИМХО, действительная вещь, и есть несколько инструкций, доступных для запуска mod_perl в perlbrew.
Сначала убедитесь, что perl построен с поддержкой общей библиотеки, передав флаг -Duseshrplib (в противном случае на 64-битных системах вы получите запутанную ошибку сборки о -fPIC):
perlbrew install perl-5.16.3 -Duseshrplib
Установите библиотеки разработки Apache для вашей системы. В Debian это зависит от используемого вами Apache MPM. Для префикса MPM:
sudo apt-get install apache2-prefork-dev
Или для рабочего MPM:
sudo apt-get install apache2-threaded-dev
Затем вам понадобятся некоторые опции для сборки и установки mod_perl2 в нужном месте. Обратите внимание, что это означает, что cpanm не сможет его создать, но вы можете использовать его для получения источника:
cpanm mod_perl2 # fails
cd ~/.cpanm/latest-build/mod_perl-2.0.8/ # adjust mod_perl version
Отрегулируйте версию Perl соответственно. (Параметр MP_APXS должен предоставить правильный путь для систем на базе Debian, которые вам могут не понадобиться.)
perl Makefile.PL MP_APXS=/usr/bin/apxs2 \
MP_AP_DESTDIR=$HOME/perl5/perlbrew/perls/perl-5.16.3/
make
make install
Наконец, измените строку LoadModule в вашем конфигурационном файле Apache (соответственно настройте пути):
LoadModule perl_module <your homedir>/perl5/perlbrew/perls/<your perl>/usr/lib/apache2/modules/mod_perl.so
Ваша установка mod_perl теперь будет запускать версию Perl, которую вы хотите. Установите все необходимые модули CPAN и начните работу.