mod_perl: komunikace mezi handlery

Honza Pazdziora adelton na fi.muni.cz
Úterý Únor 22 11:49:48 MET 2005


On Tue, Feb 22, 2005 at 11:14:58AM +0100, Jan Kasprzak wrote:
> : > nebo jinou strukturu.
> : 
> : Pomoci pnotes.
> : 
> 	No, pnotes to taky nezna (i kdyz vecer jsem na toto taky v manualu
> narazil).

A po

	$ perl -MApache2 -MModPerl::MethodLookup -e print_method pnotes
	To use method 'pnotes' add:
		use Apache::RequestUtil ();

?

> : > nema metodu ->connection(), i kdyz v manualove strance pisou ze ma).
> : 
> : A mas ji usenutou?
> 
> 	No, jine dokumentace pisou ze ->notes je primo metoda $r,
> nikoliv $r->connection. Ale ani to nefunguje. Ted mam

No, takhle: bavime se o mod_perl 1 nebo mod_perl 2? V mod_perlu 2 je
potreba rikat use dalsi moduly, abys k tomu $r (nebo i $c) prihodil
dalsi metody.

> ----------- /var/www/html/perl/Kas.pm ----------------
> package Kas;
> 
> use Apache::RequestRec();
> use Apache::Const -compile => qw(OK);
> 
> sub handler {
>         my $r = shift;
>         $r->content_type('text/plain');
>         print STDERR "Handler called\n";
>         # $r->pnotes(a=>'b');
> 	# ^^^^ toto kdyz odkomentuju tak to spadne <-------------------

Jsme-li v Apache 2 / mod_perl 1.99, tak nahoru dat ten RequestUtil.

> 	Hmm, jaky je rozdil mezi ModPerl::Registry, ::RegistryBB,
> ::PerlRun ?

Registry je puvodni vec, RegistryBB je pokus o ciste prepsani toho
sameho (dokumentace rika

	ModPerl::RegistryBB is similar to ModPerl::Registry, but does
	the bare minimum (mnemonic: BB = Bare Bones) to compile
	a script file once and run it many times, in order to get
	the maximum performance. Whereas ModPerl::Registry does
	various checks, which add a slight overhead to response times.

) a PerlRun neni persistentni.

> 	Jaky nastroj/modul mam pouzit, pokud chci programovat
> webove aplikace tak, ze
> 
> - URL (tedy <Location>) bude odpovidat primo skriptu (cili
> 	http://mujserver/cesta/skript.pl by znamenalo, ze se spusti
> 	sub handler() z <DocumentRoot>/cesta/skript.pl), zadne
> 	obskurni mapovani modulu na <Location> v httpd.conf.

PerlResponseHandler

> - preferuji spousteni sub handler(), ale prinejhorsim se muze spoustet
> 	i ten skript jako hlavni program

Napsat si vlastni modul, ktery udela to nacteni, kompilaci a spusteni
${package}::handler, da se na to s pouzit ModPerl::RegistryCooker.

> - skripty se maji predkompilovat, ale musi se zaroven nacist pri zmene
> 	toho skriptu ve filesystemu

Pouzit should_compile_if_modified nebo prislusne predefinovat.

> - totez (znovunacteni) pro perlove moduly, ktere si reknu (nejlepe
> 	v jinem nez systemovem adresari (Apache::Reload nebo Module::Reload?)

Apache::Reload, pripadne vzit tohle jako zaklad pro svuj modul
s vytunenym chovanim.

> - chci aby aplikace (tedy ten skript.pl) pokud mozno dostala co nejvic
> 	veci zvenku - cili zejmena $r, $q (CGI), pripadne i $dbh.
> 	Tohle ale lze zrejme udelat nejakym handlerem pred ModPerl::Registry.

Ano, dat to do toho *Registry* modulu.

> - a pokud by bylo vic moznosti, tak preferuju system, ktery mi umozni
> 	psat aplikace tak, abych pokud mozno mohl kod psat hned a nemusel
> 	kazdou aplikaci zacit celou strankou ruznych "use" a "new CGI"
> 	a podobne.

Muzes se inspirovat na

	http://www.fi.muni.cz/~adelton/perl/RayApp-1.165.tar.gz

je to tedy primarne zamerene na to XML / XSLT zpracovani, ale presne
tohle je tam taky a tohle se tam dela pomoci input modulu, ktere se
daji nakonfigurovat ruzne pro ruzna URL a pak vraci seznam parametru,
ktere se pak predavaji primo handleru. Dokumentace tam neni nijak
valna, ale jsou tam dost extensivni testy v httpd-tests, takze jako
dokumentaci je asi vhodne vzit tenhle podadresar, skripty jsou *.mpl
a konfigurace *.conf/*.conf.in.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, large Web systems, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Perl