[Cascavel-pm] CGI::Application e mod_perl2

Fabiano Reese Righetti frighetti em cascavel.pm.org
Sexta Junho 2 06:19:23 PDT 2006


Luis Motta Campos escreveu:
  >   Eu acho que sim. Você escreveu um handler genérico para executar o
> ciclo CREATE->RUN->DESTROY do seus objectos de aplicação, certo? Olhar
> para este pedaço de código poderia ser interessante.

    O único pedaço de código que incluí no seu módulo exemplo Auth::User
de seu artigo foi aquele que descrevi no primeiro e-mail.

>   Você tem sorte... pode contar com ModPerl2... tem muitos lugares onde
> existe apenas o 1...

    Da maneira como implementei o handler para que funcione no mod_perl2
seria perfeitamente possivel utilizá-lo no mod_perl1, onde só precisaria
mudar a declaração do mesmo, trocando o:

sub handler : method
{
	my ($class, $r) = @_;
	...

por:

sub hander ($)
{
	my $r = $_;

*Me corriga se estou errado! Pois realmente não tenho certeza se o
mod_perl1 reconheceria o primeiro handler na forma como esta.

>   O CGI::Application, assim como muitos outros módulos-base de
> frameworks para aplicações para a internet, não foram projetados tendo
> em mente que eventualmente o sistema de execução de scripts deixaria de
> ser CGI.
> 
>   Neste sentido, o CGI::Application é jurássico, totalmente baseado e
> dependente do CGI.pm, um módulo muito antigo e nem sempre funcional.
> 
>   Acho que o mais importante mesmo, se você está interessado em saber
> sobre os recursos, Fabiano, é dar uma espiada sob o capô do seu motor,
> para a gente ver como foi que você colocou o motor da ferrari (ModPerl)
> no chassi do fusquinha (CGI::Application).
> 
>   Explica para  gente como foi que você adaptou essas duas peças juntas?
> Disso podem surgir muitas ouras sugestões.

    A grande jogada foi me preocupar em como fazer um CGI::Aplication
rodar em mod_perl2 sem necessitar de algum outro módulo para auxiliar
nesta tarefa. Foi ai que pensei em simplesmente criar um handler() que
possibilita-se o mod_perl2 "executar" a aplicação. Ficando a magica
assim:

	$r->print (
		( __PACKAGE__->new )->run();
	);

...no qual a aplicação acaba sendo reconhecida como CGI::App, e o
resultado da execução é repassada para o usuário atráves de $r->print().

    Sem nada de excepcional feito a mais para isto acontecer!

    É neste ponto que esta a minha preocupação, eu não deveria fazer
algum controle adicional? Não estou deixando algo para trás que poderia
me trazer grandes transtornos após um tempo de execução desta aplicação?

    Aproveitando o e-mail, mas sem fugir do assunto e abusando um pouco
do conhecimento dos monges. Tenho mais uma questão a levantar:

    CGI::App prove alguma forma de tratamento de run_modes() passados
pelo usuário inexistentes? Já estou pesquisando sobre o assunto e até o
momento não achei uma forma elegante de tratar quando um usuário "mal
intencionado" queira passar um run_mode que não exista na minha
aplicação, causando um erro na mesma (No such run mode...).

o_O,
--
Fabiano Reese Righetti


Mais detalhes sobre a lista de discussão Cascavel-pm