RE: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-05 Thread Beau E. Cox
Hi Stas -

> -Original Message-
> From: Stas Bekman [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 04, 2003 10:45 PM
> To: Beau E. Cox
> Cc: Modperl
> Subject: Re: [mp2] apache/mod_perl starup failure using cvs 09
>
>
> Beau E. Cox wrote:
> > Yea, Stas, I clearly see your reasoning. However, this is not a change
> > of behaviour between mp1 and mp2, but rather between mp2-08 and the
> > current cvs (09).
>
> since 09 > 08, it *is* a change in behaviour between mp1 and mp2
> ;) though
> potentially not the final one.
>
> > I will continue using mp2-08 and talk to the mason
>
> meanwhile you can continue using the lates cvs, but add to the
> beginning of
> your startup to cheat on the latest change:
>
> require Apache::RequestUtil;
> no warnings 'redefine';
> my $sub = *Apache::request{CODE};
> *Apache::request = sub {
>  my $r;
>  eval { $r = $sub->('Apache'); };
>  # warn $@ if $@;
>  return $r;
> };
>
> > list - but it seems that folks over there are not too anxious to
> > do much in the line of mp2 development until the 'request' is converted.
>
> You mean Apache::Request?

Yes...

> [...]

Your fix works perfectly - I'm a happy camper. I passed our discussion
to the mason list - will keep you folks informed.

Aloha => Beau;

PS: Have you ever noticed the closer your deadline becomes, the more
things go wrong and the more mistakes you make?




Re: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-05 Thread Stas Bekman
Beau E. Cox wrote:
Yea, Stas, I clearly see your reasoning. However, this is not a change
of behaviour between mp1 and mp2, but rather between mp2-08 and the
current cvs (09). 
since 09 > 08, it *is* a change in behaviour between mp1 and mp2 ;) though 
potentially not the final one.

I will continue using mp2-08 and talk to the mason
meanwhile you can continue using the lates cvs, but add to the beginning of 
your startup to cheat on the latest change:

require Apache::RequestUtil;
no warnings 'redefine';
my $sub = *Apache::request{CODE};
*Apache::request = sub {
my $r;
eval { $r = $sub->('Apache'); };
# warn $@ if $@;
return $r;
};
list - but it seems that folks over there are not too anxious to
do much in the line of mp2 development until the 'request' is converted.
You mean Apache::Request?

My only concern is that mp2 and mason will eventually work well
together - I feel a little like I am caught in the middle ;)
if you don't mind to get frustrated here and there, that's the best position 
to learn things ;)

Please don't spend any more time on this until I get a mason answer.
;)

__
Stas BekmanJAm_pH --> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


RE: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-05 Thread Beau E. Cox


> -Original Message-
> From: Stas Bekman [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 04, 2003 9:23 PM
> To: Beau E. Cox
> Cc: Modperl
> Subject: Re: [mp2] apache/mod_perl starup failure using cvs 09
> 
> 
> [...]
> 
> >>why does Mason needs $r at the server startup? There is no
> >>request object at
> >>the server startup, so it's only fair that mp reports the error.
> 
> [...]
> 
> > Would you have and suggestions from the mod_perl perspective?
> > I will take this query over to mason if you feel that is where
> > it belongs - but I'll need some further insight into the mod_perl
> > changes.
> 
> I see what you mean. In mp1 you relied on Apache->request's not 
> being defined 
> as a side-effect to test whether you are inside request or not.
> 
> I will explain why I've chosen to croak, rather than return 'undef'.
> 
> In mp1 Apache->request was either undef (outside of request) or 
> $r (during the 
> request). You couldn't control that. In mp2 in order to optimize things, 
> keeping the global request around is optional. So if you don't 
> need it you get 
> some speed improvement.
> 
> So if the user has the global request setting off and 
> Apache->request returns 
> undef, he may think that he is not inside the request phases 
> (precisely what 
> mason does), which is wrong.
> 
> Therefore if you still wish to rely on this (which is no longer 
> always valid 
> under mp2), you can do:
> 
>eval { $r = Apache->request}
> 
> to trap the croak.
> 
> may be you should use something else as a predicate to calling 
> Apache->request. For example you could use:
> 
> ModPerl::Util::current_callback() to figure out where you are. 
> Though it'll 
> incur a checking of several options. So perhaps we need a new 
> method or may be 
> not. Ideas are welcome.
> 
> Philippe has agreed with my reasoning when I've suggested the change and 
> nobody else has objected (or had any opinion at all), so it went 
> in. Since 
> nothing is cast is stone (yet) on the mp2 API, you may suggest your 
> explanation why it should behave differently if you think that my 
> idea is wrong.
> 
> __
> Stas BekmanJAm_pH --> Just Another mod_perl Hacker
> http://stason.org/ mod_perl Guide ---> http://perl.apache.org
> mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
> http://modperlbook.org http://apache.org   http://ticketmaster.com
> 

Yea, Stas, I clearly see your reasoning. However, this is not a change
of behaviour between mp1 and mp2, but rather between mp2-08 and the
current cvs (09). I will continue using mp2-08 and talk to the mason
list - but it seems that folks over there are not too anxious to
do much in the line of mp2 development until the 'request' is converted.

My only concern is that mp2 and mason will eventually work well
together - I feel a little like I am caught in the middle ;)

Please don't spend any more time on this until I get a mason answer.

Aloha => Beau; 



Re: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-04 Thread Stas Bekman
[...]

why does Mason needs $r at the server startup? There is no
request object at
the server startup, so it's only fair that mp reports the error.
[...]

Good point. However, I seemed to have given you the code of
mason's ApacheHandler out of context; the snip above is from the
'new' method which I use in setting up the mason handler routine:
# Create ApacheHandler object at startup.
my $ah =
  HTML::Mason::ApacheHandler->new (
args_method => "CGI",
comp_root   => "/srv/www/htdocs",
data_dir=> "/srv/www/mason",
error_mode  => 'output',
  );
In this trivial case it doesn't seem worthwhile to go to all
that trouble, but, as in my production server, when working
with a lot of (possible dynamic) vhosts, it works well.
If the Apache->request (or a request passed as the last -
odd - parameter to new) is defined, some further processing
occurs; but at startup, the request is neither expected to
be there nor needed.
I guess (looking at my result matrix) that some change was made
to mod_perl to prohibit even querying the presence of
Apache->request at startup. So now I (and other mason folks)
must find another way to instantiate handlers.
Would you have and suggestions from the mod_perl perspective?
I will take this query over to mason if you feel that is where
it belongs - but I'll need some further insight into the mod_perl
changes.
I see what you mean. In mp1 you relied on Apache->request's not being defined 
as a side-effect to test whether you are inside request or not.

I will explain why I've chosen to croak, rather than return 'undef'.

In mp1 Apache->request was either undef (outside of request) or $r (during the 
request). You couldn't control that. In mp2 in order to optimize things, 
keeping the global request around is optional. So if you don't need it you get 
some speed improvement.

So if the user has the global request setting off and Apache->request returns 
undef, he may think that he is not inside the request phases (precisely what 
mason does), which is wrong.

Therefore if you still wish to rely on this (which is no longer always valid 
under mp2), you can do:

  eval { $r = Apache->request}

to trap the croak.

may be you should use something else as a predicate to calling 
Apache->request. For example you could use:

ModPerl::Util::current_callback() to figure out where you are. Though it'll 
incur a checking of several options. So perhaps we need a new method or may be 
not. Ideas are welcome.

Philippe has agreed with my reasoning when I've suggested the change and 
nobody else has objected (or had any opinion at all), so it went in. Since 
nothing is cast is stone (yet) on the mp2 API, you may suggest your 
explanation why it should behave differently if you think that my idea is wrong.

__
Stas BekmanJAm_pH --> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


RE: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-04 Thread Beau E. Cox
Hi Stas -

> -Original Message-
> From: Stas Bekman [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, March 04, 2003 6:18 PM
> To: Beau E. Cox
> Cc: Modperl
> Subject: Re: [mp2] apache/mod_perl starup failure using cvs 09
>
>
> Beau E. Cox wrote:
> > -8<-- Start Bug Report 8<--
> > 1. Problem Description:
> >
> >   Sorry - is this mason's problem?
> >
> >   Apache does not start using latest mod_perl2 (cvs) when
> >   using a mason startup script.
> >
> >   Failure matrix:
> >
> >   mod_perl version   mason version  using startup.pl  using
> simple-mason.pl
> > OK?
> >
> --
> > 
> >   08-source  1.16   yes   yes
> > OK
> >   08-source  1.19   yes   yes
> > OK
> >   09-cvs 1.19   yes   yes
> > FAIL
> >   09-cvs 1.16   yes   yes
> > FAIL
> >   09-cvs 1.19   no-in httpd   no mason
> > OK
> >   09-cvs 1.19   no-in httpd   no-in httpd
> > OK
> >
> >   Apache startup console output:
> >
> > [Tue Mar 04 16:45:09 2003] [error] Global $r object is not
> available. Set:
> > PerlOptions +GlobalRequest
> > in httpd.conf at
> /usr/lib/perl5/site_perl/5.8.0/HTML/Mason/ApacheHandler.pm
> > line 573.
> > Compilation failed in require at (eval 3) line 1.
>
> [...]
>
> >   HTML::Mason::ApacheHandler revelant lines:
> >
> >  my $allowed_params = $class->allowed_params(%defaults, %params);
> >
> > 573: if ( exists $allowed_params->{comp_root} and
> >   my $req = $r || Apache->request )  # DocumentRoot is only
> available
>
> why does Mason needs $r at the server startup? There is no
> request object at
> the server startup, so it's only fair that mp reports the error.
>
> __
> Stas BekmanJAm_pH --> Just Another mod_perl Hacker
> http://stason.org/ mod_perl Guide ---> http://perl.apache.org
> mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
> http://modperlbook.org http://apache.org   http://ticketmaster.com
>
>

Good point. However, I seemed to have given you the code of
mason's ApacheHandler out of context; the snip above is from the
'new' method which I use in setting up the mason handler routine:

# Create ApacheHandler object at startup.
my $ah =
  HTML::Mason::ApacheHandler->new (
args_method => "CGI",
comp_root   => "/srv/www/htdocs",
data_dir=> "/srv/www/mason",
error_mode  => 'output',
  );

In this trivial case it doesn't seem worthwhile to go to all
that trouble, but, as in my production server, when working
with a lot of (possible dynamic) vhosts, it works well.

If the Apache->request (or a request passed as the last -
odd - parameter to new) is defined, some further processing
occurs; but at startup, the request is neither expected to
be there nor needed.

I guess (looking at my result matrix) that some change was made
to mod_perl to prohibit even querying the presence of
Apache->request at startup. So now I (and other mason folks)
must find another way to instantiate handlers.

Would you have and suggestions from the mod_perl perspective?
I will take this query over to mason if you feel that is where
it belongs - but I'll need some further insight into the mod_perl
changes.

Aloha => Beau;




Re: [mp2] apache/mod_perl starup failure using cvs 09

2003-03-04 Thread Stas Bekman
Beau E. Cox wrote:
-8<-- Start Bug Report 8<--
1. Problem Description:
  Sorry - is this mason's problem?

  Apache does not start using latest mod_perl2 (cvs) when
  using a mason startup script.
  Failure matrix:

  mod_perl version   mason version  using startup.pl  using simple-mason.pl
OK?
  --

  08-source  1.16   yes   yes
OK
  08-source  1.19   yes   yes
OK
  09-cvs 1.19   yes   yes
FAIL
  09-cvs 1.16   yes   yes
FAIL
  09-cvs 1.19   no-in httpd   no mason
OK
  09-cvs 1.19   no-in httpd   no-in httpd
OK
  Apache startup console output:

[Tue Mar 04 16:45:09 2003] [error] Global $r object is not available. Set:
PerlOptions +GlobalRequest
in httpd.conf at /usr/lib/perl5/site_perl/5.8.0/HTML/Mason/ApacheHandler.pm
line 573.
Compilation failed in require at (eval 3) line 1.
[...]

  HTML::Mason::ApacheHandler revelant lines:

 my $allowed_params = $class->allowed_params(%defaults, %params);

573: if ( exists $allowed_params->{comp_root} and
  my $req = $r || Apache->request )  # DocumentRoot is only available
why does Mason needs $r at the server startup? There is no request object at 
the server startup, so it's only fair that mp reports the error.

__
Stas BekmanJAm_pH --> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com