Как использовать 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?
Спасибо за Ваше внимание.
2 ответа
Я не думаю, что это хорошее применение для perlbrew, который перемещается по символическим ссылкам в своем собственном каталоге. Хитрость заключается в переключении модуля mod_perl. Помните, что mod_perl будет несовместим в двоичном коде между основными версиями perl, и вам придется компилировать его с использованием apache для каждой версии perl (и apache), которую вы хотите использовать.
Perlbrew действительно делает две большие вещи для вас:
- Устанавливает perl, который легко сделать самостоятельно.
- Переключается вокруг символических ссылок так
perl
какая версия вы хотите.
Если вы откажетесь от последнего, perlbrew на самом деле не так уж много для вас делает. Я не думаю, что особенность символической ссылки является особенно ценной.
Я думаю, что perlbrew хорош для того, что он есть, но когда вы начинаете делать что-то, выходящее за его ограниченную область, пора не использовать его. Предполагается, что это инструмент, который поможет вам сэкономить время и головную боль, поэтому, если он не достигает этой цели, он не подходит для вашей ситуации.
В этой ситуации, когда я поддерживаю одно большое веб-приложение, я делаю для него собственную установку perl, которую я больше никому не позволяю использовать.
Для других ваших вопросов:
заполнитель уценки
Вам не нужно настраивать какие-либо
VirtualHost
вещи. Если вы используете mod_perl, Perl уже там, и вы не можете выбрать Perl. Если вы используете CGI, вы указываете perl в строке shebang. Вы должны будете убедиться, что apache подберет правильные каталоги библиотеки, но я думаю, что Perlbrew справится с этим. Возможно, вам придется использоватьSetEnv
или что-то подобное в вашем httpd.conf.Для ванильного CGI просто укажите правый (символьный) путь для любой версии perlbrew по умолчанию. Программа CGI будет просто использовать любой Perl, на который указывает путь.
См. Ответ Брайана Д. Фоя о том, почему не стоит использовать 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
Или для рабочего МПМ:
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 и приступайте к работе.