You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Andrew Green <an...@article7.co.uk> on 2005/02/02 15:54:48 UTC
[mp1] Method handler that eventually seems to "forget" it's a
method handler
Hi,
I seem to have a bizarre problem with method handlers on my setup. I
have a set of different handlers, all of which are method handlers so
that I can easily inherit shared code across a collection of different
installations of my application on the same server.
The first handler to get invoked is a PerlTransHandler -- everything
works fine (or at least seems to) for quite some time, but then the
handler begins "forgetting" that it's a method handler, and instead of
the class being passed before $r, $r becomes the first thing passed.
At least, that seems to be what's happening. Is this a known problem?
My setup is as follows:
Perl 5.8.0 (Red Hat EL 3 default)
Apache/1.3.29
mod_perl/1.29
Here's what I imagine to be the relevant bits of httpd.conf:
MinSpareServers 10
MaxSpareServers 20
StartServers 10
MaxClients 60
MaxRequestsPerChild 1000
...
<VirtualHost xxx>
PerlTransHandler MyApp::MyInstall::Dispatcher
...
Here's the relevant bits of Dispatcher.pm:
package MyApp::MyInstall::Dispatcher;
use strict;
use Apache::Constants qw(OK DECLINED NOT_FOUND REDIRECT FORBIDDEN);
use Apache::URI;
our @ISA = qw(MyApp::Core::Dispatcher);
1;
####
sub handler ($$) {
my ($class,$r) = @_;
return DECLINED unless ($r->is_initial_req());
...
And here's the error (that only starts appearing after the server's
been running for a while:
Can't call method "is_initial_req" on an undefined value...
The error then points to the line quoted above. Of course, Apache
never gets to other handlers later in the sequence, so I can't easily
see whether the problem is limited to TransHandlers, or whether all my
method handlers would stop acting as such. Restarting the server makes
the problem go away -- for a while!
I'd really like to avoid having to upgrade/change Perl or mod_perl if
at all possible. Nonetheless, any help, advice or guidance anyone can
provide would be very much appreciated.
Cheers,
Andrew.
Re: [mp1] Method handler that eventually seems to "forget" it's a
method handler
Posted by Geoffrey Young <ge...@modperlcookbook.org>.
>>I'll give that a go and see. Is the following also kosher, then?
>>
>> $r->push_handlers(
>> PerlCleanupHandler => MyApp::MyInstall::Cleaner->handler
>> );
>
>
> sorry, no - you can't currently push a method handler like that. see the
>
> * method handler cached-CVs
>
> entry in the STATUS file that ships with mod_perl-1.0 for some relevant links.
and for those that don't go and read the links, while the above form isn't
valid you should be able to use this instead.
$r->push_handlers(
PerlCleanupHandler => 'MyApp::MyInstall::Cleaner->handler'
);
(note the quotes)
--Geoff
Re: [mp1] Method handler that eventually seems to "forget" it's a
method handler
Posted by Geoffrey Young <ge...@modperlcookbook.org>.
Andrew Green wrote:
> On Wed, 02 Feb 2005 10:10:56 -0500, Geoffrey Young wrote:
>
>
>> PerlTransHandler MyApp::MyInstall::Dispatcher->handler
>>
>>and see if that helps.
>
>
> I'll give that a go and see. Is the following also kosher, then?
>
> $r->push_handlers(
> PerlCleanupHandler => MyApp::MyInstall::Cleaner->handler
> );
sorry, no - you can't currently push a method handler like that. see the
* method handler cached-CVs
entry in the STATUS file that ships with mod_perl-1.0 for some relevant links.
--Geoff
Re: [mp1] Method handler that eventually seems to "forget" it's a
method handler
Posted by Andrew Green <an...@article7.co.uk>.
On Wed, 02 Feb 2005 10:10:56 -0500, Geoffrey Young wrote:
> PerlTransHandler MyApp::MyInstall::Dispatcher->handler
>
> and see if that helps.
I'll give that a go and see. Is the following also kosher, then?
$r->push_handlers(
PerlCleanupHandler => MyApp::MyInstall::Cleaner->handler
);
> you should also be preloading via
>
> PerlModule MyApp::MyInstall::Dispatcher
>
> or in a startup.pl.
Yes, I am -- sorry I forgot to mention this -- in a startup.pl, as
follows:
use MyApp::Core::Dispatcher ();
use MyApp::MyInstall::Dispatcher ();
Thanks for your help.
Cheers,
Andrew.
--
::
article seven Andrew Green
automatic internet andrew@article7.co.uk | www.article7.co.uk
Re: [mp1] Method handler that eventually seems to "forget" it's a method handler
Posted by Martin Moss <ma...@btopenworld.com>.
I tried ->handler in my configs, made no difference.
I was doing a 'require' in a startup script if that
makes any difference. Haven't seen this issue with
simillar code anywhere else..
Marty
--- Geoffrey Young <ge...@modperlcookbook.org> wrote:
>
> > <VirtualHost xxx>
> > PerlTransHandler MyApp::MyInstall::Dispatcher
>
> make that
>
> PerlTransHandler
> MyApp::MyInstall::Dispatcher->handler
>
> and see if that helps. you should also be
> preloading via
>
> PerlModule MyApp::MyInstall::Dispatcher
>
> or in a startup.pl.
>
> HTH
>
> --Geoff
>
___________________________________________________________
ALL-NEW Yahoo! Messenger - all new features - even more fun! http://uk.messenger.yahoo.com
Re: [mp1] Method handler that eventually seems to "forget" it's a
method handler
Posted by Geoffrey Young <ge...@modperlcookbook.org>.
> <VirtualHost xxx>
> PerlTransHandler MyApp::MyInstall::Dispatcher
make that
PerlTransHandler MyApp::MyInstall::Dispatcher->handler
and see if that helps. you should also be preloading via
PerlModule MyApp::MyInstall::Dispatcher
or in a startup.pl.
HTH
--Geoff
Re: [mp1] Method handler that eventually seems to "forget" it's a method handler
Posted by Martin Moss <ma...@btopenworld.com>.
I've seen this problem and never got to the bottom of
it, on a redhat box with 5.8.3 (I think) and same
apache and mod_perl,
Marty
--- Andrew Green <an...@article7.co.uk> wrote:
> Hi,
>
> I seem to have a bizarre problem with method
> handlers on my setup. I
> have a set of different handlers, all of which are
> method handlers so
> that I can easily inherit shared code across a
> collection of different
> installations of my application on the same server.
>
> The first handler to get invoked is a
> PerlTransHandler -- everything
> works fine (or at least seems to) for quite some
> time, but then the
> handler begins "forgetting" that it's a method
> handler, and instead of
> the class being passed before $r, $r becomes the
> first thing passed.
> At least, that seems to be what's happening. Is
> this a known problem?
>
> My setup is as follows:
>
> Perl 5.8.0 (Red Hat EL 3 default)
> Apache/1.3.29
> mod_perl/1.29
>
>
> Here's what I imagine to be the relevant bits of
> httpd.conf:
>
> MinSpareServers 10
> MaxSpareServers 20
> StartServers 10
> MaxClients 60
> MaxRequestsPerChild 1000
> ...
> <VirtualHost xxx>
> PerlTransHandler MyApp::MyInstall::Dispatcher
> ...
>
>
> Here's the relevant bits of Dispatcher.pm:
>
> package MyApp::MyInstall::Dispatcher;
>
> use strict;
> use Apache::Constants qw(OK DECLINED NOT_FOUND
> REDIRECT FORBIDDEN);
> use Apache::URI;
>
> our @ISA = qw(MyApp::Core::Dispatcher);
>
> 1;
>
> ####
>
> sub handler ($$) {
>
> my ($class,$r) = @_;
> return DECLINED unless ($r->is_initial_req());
> ...
>
>
> And here's the error (that only starts appearing
> after the server's
> been running for a while:
>
> Can't call method "is_initial_req" on an undefined
> value...
>
> The error then points to the line quoted above. Of
> course, Apache
> never gets to other handlers later in the sequence,
> so I can't easily
> see whether the problem is limited to TransHandlers,
> or whether all my
> method handlers would stop acting as such.
> Restarting the server makes
> the problem go away -- for a while!
>
> I'd really like to avoid having to upgrade/change
> Perl or mod_perl if
> at all possible. Nonetheless, any help, advice or
> guidance anyone can
> provide would be very much appreciated.
>
> Cheers,
> Andrew.
>
___________________________________________________________
ALL-NEW Yahoo! Messenger - all new features - even more fun! http://uk.messenger.yahoo.com