On Tuesday 23 March 2004 12:55 am, Beau E. Cox wrote:
> On Tuesday 23 March 2004 12:04 am, Beau E. Cox wrote:
> > -------------8<---------- Start Bug Report ------------8<----------
> > 1. Problem Description:
> >
> > Using latest (CVS) Apache2, mod_perl 2, libapreq2:
> >
> > t/modules/apache_status fails
> >
> > console log:
> >
> > [...]
> >
> > error_log:
> >
> > [...]
> > [Mon Mar 22 23:52:14 2004] [error] failed to resolve handler
> > `Apache::Status' [Mon Mar 22 23:52:14 2004] [error] [client 127.0.0.1]
> > Argument "2.03-dev" isn't numeric in numeric ge (>=)
> > at /home/test/src/modperl2/modperl-2.0/blib/lib/Apache/Status.pm line 35.
> > \nCompilation failed in require at (eval 95) line 3.\n
> > [...]
>
> I should have seen this, but my libapreq2 version is NOT numeric -
> '2.03-dev', so compile error.
>
> Also seems to be an if/else problem later. This patch works for me:
>
> diff -Nau unpatched/Status.pm patched/Status.pm
> --- unpatched/Status.pm 2004-03-23 00:48:50.212799704 -1000
> +++ patched/Status.pm 2004-03-23 00:42:25.498285200 -1000
> @@ -32,7 +32,8 @@
> our $newQ;
>
> if (eval { require Apache::Request }) {
> - if ($Apache::Request::VERSION >= 2) {
> + my ( $ver ) = $Apache::Request::VERSION =~ /(\d+[\.]*\d*)/;
> + if ($ver >= 2) {
> $newQ ||= sub { Apache::Request->new(@_) };
> }
> }
> @@ -60,7 +61,7 @@
> $newQ ||= sub { CGI->new };
> }
> }
> -else {
> +if (!$newQ) {
> die "Need CGI.pm or Apache::Request to operate";
> }
Still did't work. Startup fails like so:
Starting httpd[Tue Mar 23 01:03:34 2004] [error] Subroutine
Apache::Status::status_mason0001 redefined
at
/home/test/perl/5.8.3-ithread/lib/site_perl/5.8.3/i686-linux-thread-multi/Apache/Status.pm
line 140.\nCompilation failed in require
at /home/test/httpd/conf/wm-startup2.pl line 41.\nBEGIN failed--compilation
aborted at /home/test/httpd/conf/wm-startup2.pl line 41.\nCompilation failed
in require at (eval 2) line 1.\n
[Tue Mar 23 01:03:34 2004] [error] Can't load Perl
file: /home/test/httpd/conf/wm-startup2.pl for server cathy.beaucox.com:0,
exiting...
wm-startup2.pl ( line 41 marked with > ):
###################################################
# Apache2/mod_perl2/mason startup script
# Beau E. Cox
# Feb 25, 2004
#
# file:startup2.pl
###################################################
use Apache2 ();
use lib ( $ENV{MOD_PERL_INC} );
use Apache::Request ();
use Apache::Cookie ();
use CGI ();
use CGI::Cookie ();
use ModPerl::Util (); #for CORE::GLOBAL::exit
use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::RequestUtil ();
use Apache::Server ();
use Apache::ServerUtil ();
use Apache::Connection ();
use Apache::Log ();
use Apache::URI ();
use Apache::Session ();
use APR::Table ();
use ModPerl::Registry ();
use Apache::Const -compile => ':common';
use APR::Const -compile => ':common';
use ModPerl::Const -compile => ':common';
use Apache::DBI ();
>use MyApache::Apache2Handler ();
1;
MyApache::Apache2Handler:
#!/usr/bin/perl
#--------------------------------------------------
#
# Mason Apache2Handler.pm
#
# Built for multiple sites, mutiple component
# roots.
#
# Feb 25, 2004
# Beau E. Cox
# <[EMAIL PROTECTED]><http://beaucox.com>
#
#--------------------------------------------------
package MyApache::Apache2Handler;
use strict;
use warnings;
use Apache2 ();
use lib ( $ENV{MOD_PERL_INC} );
use Apache::Request ();
use Apache::Cookie ();
use CGI ();
use CGI::Cookie ();
our %ah = ();
# Mason w/Apache support
use MasonX::Apache2Handler;
# Modules my components will use
{
package HTML::Mason::Commands;
use Apache::Const -compile => ':common';
use APR::Const -compile => ':common';
use ModPerl::Const -compile => ':common';
use Apache::Session;
use MasonX::Request::WithApache2Session;
use vars qw(%session);
use Apache::Session::File 1.50;
use DBI;
use Data::Dumper;
use Image::Magick;
use Date::Format;
use Net::IP::CMatch;
use HTML::Lint;
}
setup_sites();
# actual request handler
sub handler
{
my ($r) = @_;
# DON'T allow internal components (starting with '_')
my $fn = $r->filename;
if ($fn =~ m{.*/(.*)} && $1 && $1 =~ /^_/) {
my $rip = $r->connection->remote_ip;
$r->log_error ("attempt to access internal component: $fn remote ip:
$rip\n");
return Apache::NOT_FOUND;
}
# allow only text/xxx content type
return -1 if $r->content_type && $r->content_type !~ m|^text/|i;
# find site and handler: dispatch request
my $site = $r->dir_config ('mason_site');
unless( $site ) {
$r->log_error ("no 'mason_site' specified\n");
return Apache::NOT_FOUND;
}
unless( $ah{$site} ) {
setup_sites( $r, $site );
unless( $ah{$site} ) {
$r->log_error ("no 'ah' found for 'mason_site' $site\n");
return Apache::NOT_FOUND;
}
}
my $status = $ah{$site}->handle_request( $r );
# special error handling here (email, etc...)
$status;
}
# set up an ApacheHandler2 for each site
sub setup_sites
{
my ( $r, $site ) = shift;
my @asites = ();
if( $site ) {
push @asites, $site;
} else {
my $sites = $ENV{MASON_SITES};
return unless $sites;
@asites = split /:/, $sites;
}
for my $site( @asites ) {
next if $ah{$site};
my @args =
(
args_method => "mod_perl",
comp_root => $ENV{MASON_COMP_ROOT}."/$site",
data_dir => $ENV{MASON_DATA_ROOT}."/$site",
error_mode => 'output',
request_class =>'MasonX::Request::WithApache2Session',
session_allow_invalid_id => 'yes',
session_cookie_name => "beaucox-$site-cookie",
session_cookie_domain => '.beaucox.com',
session_cookie_expires => '+7d',
session_class => 'Apache::Session::MySQL',
session_data_source => "dbi:mysql:${site}_sessions",
session_user_name => 'mysql',
session_password => 'mysql',
session_lock_data_source => "dbi:mysql:${site}_sessions",
session_lock_user_name => 'mysql',
session_lock_password => 'mysql',
session_use_cookie => 'yes',
);
push @args, $r if $r;
$ah{$site} = new MasonX::Apache2Handler( @args );
}
}
1;
__END__
I'm stumped.
Picked up Status.pm from a download a few days ago:
-rw-r--r-- 1 install users 22617 Mar 7 23:24 Status.pm
and it works OK now.
Aloha => Beau;
--
Report problems: http://perl.apache.org/bugs/
Mail list info: http://perl.apache.org/maillist/modperl.html
List etiquette: http://perl.apache.org/maillist/email-etiquette.html