[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-team] Solution apache/perl (corruption des cgi)



Voici la solution à mon problème de migration du serveur web
(RedHat 4.2, Apache 1.1.1 [pas encore de modules] vers SuSE 6.0, Apache
1.3.4)

Ce sera peut-être utile à d'autres ;-)
-------------------------------------------------------------
Résumé : après qqs répétitions d'un appel CGI **comportant des
'require'**, le serveur refuse de continuer à répondre à cet appel.

error.log typique :
------------------
Undefined subroutine
&Apache::ROOT::perl::test_2epl::.... called at ...

Corrélation très bonne avec le MinSpareServer (se plante après x essais ==
MinSpareServer value, il faut alors relancer Apache pour pouvoir à nouveau
utiliser cet appel CGI, à nouveau pour peu de temps...)
---------------------------------------------------------------------

J'ai donc pris mon courage à deux mains et un gros paquet de doc et
howto's, pour trouver enfin la description du problème dans 
'CGI to mod_perl Porting. mod_perl Coding guidelines'

Il s'agit d'une corruption de %INC (qui gère les adresses des
requires...), due à la persistance des scripts compilés (au lieu d'une
remise à zéro automatique à chaque recompilation, comme sous PERL/CGI
classique) et à un cafouillage au niveau du hash de la table; 

Différentes solutions sont proposées, dont un test très simple : utiliser
un path absolu pour les 'require'; pour parer au plus pressé et se donner
le temps de bien vérifier tous nos scripts, j'ai utilisé une autre parade,
qui devrait de toute façon ne pas nous faire perdre trop des avantages de
mod_perl :

dans httpd.conf:
----------------
# enable perl for cgi-bin
...
'PerlHandler Apache::Registry' devient 'PerlHandler Apache::PerlRun'
-------------------------------------------------------------------------
 

autres remarques importantes :

1- toujours bien initialiser les variables globales ;-),  (un exemple est 
donné au sujet d'une vérification par password, qui ne marche bien
qu'au premier tour...)

2- bien rendre les file handles : open(xxx) .... close(xxx), car on ne
peut pas non plus compter sur une cloture automatique à la fin du
programme ...


Bref, quand on croit connaître un sujet et que tout baigne ... pendant qqs
années..., ce sujet continue à évoluer et nécessite une remise en
question. 
 
		ALAIN

--------------------------------------------- 
Dr Alain EMPAIN, Informatics, Site Master
   National Botanic Garden of Belgium
   B-1860 MEISE, Belgium 
Phone: +32 2 2693905   Fax: +32 2 2701567 
Home:  +32 85 512341,   celine@ping.be



---------
This message was sent by Majordomo 1.94.3. Please report problems to
manu@rtfm.be. If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.