2010-09-25 13 views
15

J'ai utilisé perlbrew pour gérer plusieurs versions de perl sur un portable Linux Fedora. Je l'ai utilisé avec un grand avantage pour exécuter des scripts de ligne de commande en utilisant principalement App::cmd.Comment utiliser Perlbrew pour gérer les installations Perl destinées aux applications Web?

Je veux maintenant passer à l'exécution d'applications Web écrites en utilisant CGI::Application en utilisant différents perls installés dans mon $HOME. Je suis familier avec l'exécution d'applications Web Perl en $HOME en utilisant Apache user_dir ou en créant des hôtes virtuels mais je suis incapable de trouver une manière propre d'intégrer cela et les perls gérés par perlbrew. Plus précisément, j'ai besoin d'aide pour comprendre et trouver des réponses à ces questions:

  1. Comment installer mod_perl sous perlbrew?
  2. En supposant que cela est fait, comment puis-je configurer mon VirtualHost pour qu'il prenne le bon perl qui est en cours?
  3. Si cela n'est pas possible, (ce dont je doute), puis-je au moins utiliser des installations locales pour exécuter vanille CGI?

Nous vous remercions de votre attention.

Répondre

16

Je ne pense pas que ce soit un bon usage pour perlbrew, qui se déplace autour de liens symboliques sous son propre répertoire. L'astuce est de changer le module mod_perl. Rappelez-vous, mod_perl sera incompatible binaire entre les versions majeures de perl, et que vous devrez compiler avec apache pour chaque version de perl (et apache) que vous voulez utiliser.

perlbrew fait vraiment deux grandes choses pour vous:

  • Installe perl, qui est trivialement facile à faire vous-même.
  • Bascule autour des liens symboliques, donc perl est la version que vous voulez.

Si vous abandonnez ce dernier, perlbrew n'en fait pas vraiment autant pour vous. Je ne pense pas que la fonctionnalité de lien symbolique soit particulièrement utile.

Je pense que perlbrew est bien pour ce que c'est, mais quand vous commencez à faire des choses en dehors de sa portée limitée, il est temps de ne pas l'utiliser. C'est censé être un outil pour vous faire gagner du temps et des maux de tête, alors si ce n'est pas l'objectif, ce n'est pas le bon outil pour votre situation.

Dans cette situation, où je suis en charge une seule grande application web, je lui donne sa propre installation perl que je ne laisse rien d'autre utiliser.

Pour vos questions:

  1. démarquage espace réservé

  2. Vous ne devriez pas avoir à configurer une substance VirtualHost. Si vous utilisez mod_perl, perl est déjà là et vous n'avez pas à choisir un perl. Si vous utilisez des trucs CGI, vous spécifiez le perl sur la ligne shebang. Vous devrez vous assurer qu'apache récupère les bons répertoires de bibliothèque, mais je pense que perlbrew gère cela. Vous devrez peut-être utiliser SetEnv ou quelque chose de similaire dans votre httpd.conf.Pour les CGI à la vanille, pointez simplement sur le chemin de droite (lien symbolique) quelle que soit la version perlbrew par défaut. Le programme CGI utilisera simplement tout ce que ce chemin indique.

9

Voir la réponse de brian d foy pourquoi ne pas utiliser perlbrew pour basculer entre les versions de mod_perl. Je m'attends également à ce que vous ayez besoin d'exécuter plusieurs serveurs Apache, si vous avez besoin de plusieurs versions différentes de Perl sous mod_perl. Cependant, utiliser perlbrew comme un moyen facile de construire Perl est une chose à faire à mon humble avis, et il y a peu d'instructions disponibles pour l'exécution de mod_perl sous perlbrew.

d'abord assurer perl est construit avec le soutien de la bibliothèque partagée, en passant le drapeau -Duseshrplib (sinon sur les systèmes 64 bits, vous obtiendrez un échec de la compilation de confusion à propos de -fPIC):

perlbrew install perl-5.16.3 -Duseshrplib 

Installer le développement Apache bibliothèques pour votre système. Sur Debian, cela dépend du MPM Apache que vous utilisez. Pour le MPM prefork:

sudo apt-get install apache2-prefork-dev 

Ou pour le travailleur MPM:

sudo apt-get install apache2-threaded-dev 

Ensuite, vous avez besoin d'options pour construire et installer mod_perl2 dans le bon endroit. Notez que cela signifie cpanm échouera à construire, mais vous pouvez l'utiliser pour mettre la main sur la source:

cpanm mod_perl2 # fails 
cd ~/.cpanm/latest-build/mod_perl-2.0.8/ # adjust mod_perl version 

Adjust la version de Perl ci-dessous en conséquence. (L'option MP_APXS est de donner la bonne voie pour les systèmes basés sur Debian, que vous pourriez ne pas avoir besoin.)

perl Makefile.PL MP_APXS=/usr/bin/apxs2 \ 
       MP_AP_DESTDIR=$HOME/perl5/perlbrew/perls/perl-5.16.3/ 
make 
make install 

Enfin, modifiez la ligne LoadModule dans votre fichier de configuration Apache (réglage des chemins en conséquence):

LoadModule perl_module <your homedir>/perl5/perlbrew/perls/<your perl>/usr/lib/apache2/modules/mod_perl.so 

Votre installation mod_perl exécutera maintenant la version de Perl que vous voulez. Installez tous vos modules CPAN requis et démarrez.

+0

Cela semble être la seule et unique solution pour gérer différentes versions de Perl et mod_perl en utilisant perlbrow dans Apache. Attention ... si votre instance Apache s'exécute en tant qu'utilisateur différent, vous devez rendre l'installation Perl locale accessible à cet utilisateur. Je l'ai fait dans mon installation de test avec "chmod 777 -R ./" du répertoire personnel de l'utilisateur où perlbrew a été installé. –