[Cascavel-pm] instalando mod_perl no Conectiva 10
glasswalk3r em yahoo.com.br
glasswalk3r em yahoo.com.br
Terça Fevereiro 6 07:45:38 PST 2007
Oi Champs,
Luis Motta Campos luismottacampos em yahoo.co.uk wrote:
> Claro, você lembrou de reiniciar o webserver entre cada tentativa, certo?
<piadinha>Não, eu assoviei
(http://www-128.ibm.com/developerworks/library/os-whistle/index.html?ca=dgr-
lnxw02whistlework) para ele fazer isso sozinho.</piadinha>
> Você tem um arquivo startup.pl declarado? Seria interessante ter um.
Não, eu não me preocupei em criar um. Achei que seria melhor testar com a
configuração mais simples possível (e nem isso funcionou).
> > Alguém já passou por isso?
> Eu, várias vezes. :-)
Eu tentei o FastCGI... achei um porre configurá-lo e deixei de lado. Se a
ferramenta não é mal documentada, eu ainda não encontrei o tutorial
adequado.
Minhas experiências com CGI's persistentes realmente não tem sido muito
boas...
> > Duramente minhas pesquisas eu encontrei alguns relatos de que era
> > melhor
> > compilar mod_perl junto com os fontes do Apache já que os pacotes
> > feitos
> > geralmente apresentam problemas. Vocês recomendam isso? Eu
> > particularmente
> > prefiro trabalhar com pacotes.
> Sim, eu desconfio que este é o melhor caminho para você, também.
> É a melhor forma de evitar problemas com dependências entre bibliotecas
mais novas que
> as que você tem.
>
> Se você puder me enviar os arquivos de configuração que você está
> usando, a versão do seu apache (2.0?), sua versão do mod_perl e o
> resultado de
>
> perl -le 'print "@INC"'
>
> para a gente dar uma sapeada, pode ser que o pessoal da lista (eu
> inclusive) pegue alguma coisa estranha nas suas configurações.
Aí vai as informações:
Versão do Apache:
[Mon Feb 05 23:24:45 2007] [notice] Apache/2.0.49 (Unix) mod_perl/1.99_13
Perl/v5.8.3 configured -- resuming normal operations
mod_perl 1.99_13? Muito esquisito... isso só é quase a versão 2?
O caminho de busca dos módulos:
[root em foobar conf]# perl -e 'map { print "$_\n"; } @INC'
/usr/lib/perl5/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3
/usr/lib/perl5/vendor_perl
Arquivo de configuração do Apache:
httpd.conf:
LoadModule perl_module modules/mod_perl.so
PerlModule Apache2
Alias /perl /srv/www/default/perl
<Location /perl/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
Rodando um programa de teste:
<code>
#!/usr/bin/perl
use CGI qw(standard);
use warnings;
use strict;
our $counter;
( $counter ) ? ( $counter++ ) : ( $counter = 1 );
my $cgi = CGI->new();
print $cgi->header, "You are request number $counter. Have a good day!\n";
</code>
Esse foi o resultado:
[Mon Feb 05 23:26:18 2007] [error] 5019: ModPerl::Registry: Can't locate
Apache.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi/Apache2
/usr/lib/perl5/5.8.3/i386-linux-thread-multi /usr/lib/perl5/5.8.3
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl . /etc/apache/
/etc/apache/lib/perl) at /usr/lib/perl5/5.8.3/CGI.pm line 194.\nCompilation
failed in require at /srv/www/default/perl/ajax.cgi line 3.\nBEGIN
failed--compilation aborted at /srv/www/default/perl/ajax.cgi line 3.\n
Resolvi procurar o módulo ausente:
[root em foobar conf]# find /usr -name Apache.pm
/usr/lib/perl5/5.8.3/CGI/Apache.pm
/usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi/DBI/ProfileDumper/Apa
che.pm
Isso não foi produtivo, mas me deu uma idéia de que o culpado poderia ser o
CGI.pm: testei o código abaixo e funcionou perfeitamente:
<code>
#!/usr/bin/perl
#use CGI qw(standard);
use warnings;
use strict;
our $counter;
( $counter ) ? ( $counter++ ) : ( $counter = 1 );
print "Content-type: text/plain\n\n";
print "You are request number $counter. Have a good day!\n";
</code>
E depois de executar algumas vezes, gerou isso:
You are request number 7. Have a good day!
O mod_perl não ajudou muito com a mensagem de erro anterior, mas parece que
meu módulo CGI.pm é novo demais para a versão do mod_perl que tenho
instalada. Uma fuçada no código do CGI.pm e encontrei isso:
# Turn on special checking for Doug MacEachern's modperl
if (exists $ENV{MOD_PERL}) {
# mod_perl handlers may run system() on scripts using CGI.pm;
# Make sure so we don't get fooled by inherited $ENV{MOD_PERL}
if (exists $ENV{MOD_PERL_API_VERSION} && $ENV{MOD_PERL_API_VERSION} == 2)
{
$MOD_PERL = 2;
require Apache2::Response;
require Apache2::RequestRec;
require Apache2::RequestUtil;
require Apache2::RequestIO;
require APR::Pool;
} else {
$MOD_PERL = 1;
require Apache;
}
}
A documentação diz que a versão mínima para compilar o mod_perl2 do CGI.pm
é 3.11:
[root em foobar conf]# perl -MCGI -e 'print $CGI::VERSION, "\n"'
3.17
Até aí tudo bem. Resolvi arriscar um pouco mais:
<code>
#!/usr/bin/perl
BEGIN{
$ENV{MOD_PERL_API_VERSION} = 2;
}
use CGI qw(standard);
use warnings;
use strict;
our $counter;
( $counter ) ? ( $counter++ ) : ( $counter = 1 );
my $cgi = CGI->new();
print $cgi->header, "You are request number $counter. Have a good day!\n";
</code>
Esse foi o resultado:
[Tue Feb 06 00:11:06 2007] [error] 5019: ModPerl::Registry: Can't locate
object method "register_cleanup" via package "Apache::RequestRec" at
/usr/lib/perl5/5.8.3/CGI.pm line 347.\n
Parece que estou num mato sem cachorro. Vou ter que apelar para a
compilação manual do mod_perl2? Não sei se fazer um downgrade do CGI.pm é
uma boa idéia.
[]'s
Alceu
--------------------------------------------------------------------
mail2web.com – Enhanced email for the mobile individual based on Microsoft®
Exchange - http://link.mail2web.com/Personal/EnhancedEmail
Mais detalhes sobre a lista de discussão Cascavel-pm