Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Un portage d'un site Web Mason vers Apache 2

Première rédaction de cet article le 10 novembre 2008


J'ai passé une bonne partie de la journée à porter un site Web Mason vers une nouvelle machine. Comme la première avait Apache 1 et mod_perl 1 et que la seconde machine avait les versions 2, cela n'a pas été tout seul.

J'utilisais pas mal Mason à un époque. C'est un environnement de développement en Perl pour faire des sites Web dynamiques. Il est utilisé notamment pour amazon.com. Il s'appuie sur l'intégration de Perl dans Apache, mod_perl.

On trouve pas mal de récits d'expérience d'une telle migration sur le Web. Curieusement, tout le monde n'a pas eu les mêmes bogues et ce n'est pas la même solution qui marche pour tous. Voici donc les deux points qui ont été les plus bloquants pour moi.

J'avais un fichier index dans chaque répertoire et une directive DirectoryIndex index dans la configuration d'Apache. En Apache 1, cela marchait mais, en Apache 2, la directive DirectoryIndex semble complètement ignorée dans un répertoire géré par Mason. Résultat, lorsque le client HTTP demandait un URL qui se terminait par un répertoire, pas un fichier, le serveur renvoyait un code 404 et notait dans son journal [error] [client 192.134.4.69] Attempt to serve directory: /var/www/www.generic-nic.net/dyn/whois/.

La solution qui a marché pour moi est de chercher le fichier index via une règle de réécriture Apache :

RewriteEngine on
RewriteRule ^(.*)/$ $1/index

Cette règle dit que si l'URL se termine par /, on ajoute index à la fin. Ce n'est rien, mais j'ai dû essayer pas mal de fausses solutions avant, souvent très complexes.

Le second problème concernait l'appel d'une méthode dans les fichiers Mason. Pour donner un titre aux pages, le site utilisait une technique Mason très classique :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>        
<title>Generic NIC: <& SELF:title &></title>

<& SELF:title &> signifiait qu'on appelle la méthode title. Celle-ci est définie dans chaque page :


<%method title>Technical details on the domain information</%method>

Mais cette technique ne marche plus avec mod_perl 2, la méthode n'est plus dans l'espace SELF mais dans REQUEST. Il faut donc réécrire le fichier qui contient l'en-tête HTML ainsi :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>        
<title>Generic NIC: <& REQUEST:title &></title>

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)