You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Daniel <db...@newsfactor.com> on 2001/03/12 23:39:56 UTC

$r and Registry(NG)* scripts

Just trying to get a consensus on people's usage of the apache request 
object in Registry(NG)* scripts.

I usually make the $r available as a global variable so I can use in 
various subroutines without passing it around constantly. All scripts on 
site start with:

use vars qw(%input $r);
$r = Apache->request;

This has worked fine...no complaints in log files...until I switched the 
handler from Registry to RegistryNG;

Now I see occasional:
Variable "$r" will not stay shared at /home/httpd/perl/daily-news.pl 
line 9 (#1)
in log files.

first nine from daily-news.pl:
#!/usr/bin/perl -w
use strict;
use DBI;
use date_site;
my $dateformat = date_site::dateformat;
use Apache::Request;

use vars qw($dbh %input %output %filebase $r %sites); #vars used on $r
$r = Apache->request; #<--here


Any ideas on why this would happen?

Thanks in advance,

-- 
Daniel Bohling
NewsFactor Network


Re: $r and Registry(NG)* scripts

Posted by Daniel <db...@newsfactor.com>.

Stas Bekman wrote:

> On Tue, 13 Mar 2001, Daniel wrote:
> 
> 
>> 
>> 
>>>> All scripts on
>>>> site start with:
>>>> 
>>>> use vars qw(%input $r);
>>>> $r = Apache->request;
>>>> 
>>>> This has worked fine...no complaints in log files...until I switched the
>>>> handler from Registry to RegistryNG;
>>>> 
>>>> Now I see occasional:
>>>> Variable "$r" will not stay shared at /home/httpd/perl/daily-news.pl
>>>> line 9 (#1)
>>>> in log files.
>>> 
>>> 
>>> http://perl.apache.org/guide/troubleshooting.html#Value_of_x_will_not_stay_shared
>> 
>> Thanks for the reply and the guide (of which I'm pretty familiar) Stas.
>> See comments above and below. $r is global in my scripts.
>> Unless I'm misunderstanding something, the warning shouldn't be
>> occurring. Wasn't under Registry. Also these warnings do not appear on
>> every page request, so I'm wondering if it has something to do with the
>> compile stage of perlrun and/or something that happens during a new
>> apache process creation.
> 
> 
> Sorry, I've jumped too fast with a conclusion at seeing the standard
> "...will not stay shared".

lol...np...you're doing a great job for mod_perl helping newcomers.


> But in order to debug the problem, I have to be
> able to reproduce it. Are you saying that the script below, as it is,
> has this problem? But it's not the whole script, I understand. Can you
> write a small reproducing test?

I tried last nite to put something together to trigger the error 
everytime. All I came up with was reducing maxrequestsperchild to 10
and some scary lwp selfdownloading, $self->lookup($self_uri)->run code.
The code did not produce the exact error but managed to produce:


Can't locate object method "log_error" via package "Apache::RegistryNG" 
at /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlRun.pm line 53.
 
Apache::PerlRun::can_compile('Apache::RegistryNG=HASH(0x876a8dc)') 
called at /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryNG.pm 
line 33
         Apache::RegistryNG::handler('Apache=SCALAR(0x876af3c)') called 
at /dev/null line 0
         eval {...} called at /dev/null line 0

I can't post the full site code either.

Best I can do is expand the description and other oddities I've noticed 
here on site.

There's about six heavily used RegistryNG scripts onsite.

Each calls a php header via $subr->run which does a virtual() to include 
a RegistryNG banner ad.

Each calls a php footer via $subr->run which does a virtual() to include
about five other RegistryNG banners ads and a virtual() for a RegistryNG 
list of the day's stories.

Oddity: after any $subr->run calls, the next print() may or may not 
work. I have to print "<!--anything-->"; to use print() reliably after a 
$subr->run call.

Oddity: I use $ENV{SCRIPT_NAME} for scripts that call themselves. Once a 
$subr->run has occurred  $ENV{SCRIPT_NAME} $ENV{SCRIPT_FILENAME} are 
changed in the caller to the values of the $subr %ENV (does it not try 
to restore?).

Lemme know if any of this sounds familiar.




 
Error occurs at first $r assignment:

 
>>>> first nine from daily-news.pl:
>>>> #!/usr/bin/perl -w
>>>> use strict;
>>>> use DBI;
>>>> use date_site;
>>>> my $dateformat = date_site::dateformat;
>>>> use Apache::Request;
>>>> 
>>>> use vars qw($dbh %input %output %filebase $r %sites); #vars used on $r
>>>> $r = Apache->request; #<--error first happens here
>>>> 
>>> 


-- 
Daniel Bohling
NewsFactor Network


Re: $r and Registry(NG)* scripts

Posted by Stas Bekman <st...@stason.org>.
On Tue, 13 Mar 2001, Daniel wrote:

>
>
>
> >> All scripts on
> >> site start with:
> >>
> >> use vars qw(%input $r);
> >> $r = Apache->request;
> >>
> >> This has worked fine...no complaints in log files...until I switched the
> >> handler from Registry to RegistryNG;
> >>
> >> Now I see occasional:
> >> Variable "$r" will not stay shared at /home/httpd/perl/daily-news.pl
> >> line 9 (#1)
> >> in log files.
> >
> >
> > http://perl.apache.org/guide/troubleshooting.html#Value_of_x_will_not_stay_shared
>
> Thanks for the reply and the guide (of which I'm pretty familiar) Stas.
> See comments above and below. $r is global in my scripts.
> Unless I'm misunderstanding something, the warning shouldn't be
> occurring. Wasn't under Registry. Also these warnings do not appear on
> every page request, so I'm wondering if it has something to do with the
> compile stage of perlrun and/or something that happens during a new
> apache process creation.

Sorry, I've jumped too fast with a conclusion at seeing the standard
"...will not stay shared". But in order to debug the problem, I have to be
able to reproduce it. Are you saying that the script below, as it is,
has this problem? But it's not the whole script, I understand. Can you
write a small reproducing test?

> >> first nine from daily-news.pl:
> >> #!/usr/bin/perl -w
> >> use strict;
> >> use DBI;
> >> use date_site;
> >> my $dateformat = date_site::dateformat;
> >> use Apache::Request;
> >>
> >> use vars qw($dbh %input %output %filebase $r %sites); #vars used on $r
> >> $r = Apache->request; #<--here
> >>
>
> Thanks,
>
> --
> Daniel Bohling
> NewsFactor Network
>



_____________________________________________________________________
Stas Bekman              JAm_pH     --   Just Another mod_perl Hacker
http://stason.org/       mod_perl Guide  http://perl.apache.org/guide
mailto:stas@stason.org   http://apachetoday.com http://logilune.com/
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/



Re: $r and Registry(NG)* scripts

Posted by Daniel <db...@newsfactor.com>.


>> All scripts on
>> site start with:
>> 
>> use vars qw(%input $r);
>> $r = Apache->request;
>> 
>> This has worked fine...no complaints in log files...until I switched the
>> handler from Registry to RegistryNG;
>> 
>> Now I see occasional:
>> Variable "$r" will not stay shared at /home/httpd/perl/daily-news.pl
>> line 9 (#1)
>> in log files.
> 
> 
> http://perl.apache.org/guide/troubleshooting.html#Value_of_x_will_not_stay_shared

Thanks for the reply and the guide (of which I'm pretty familiar) Stas.
See comments above and below. $r is global in my scripts.
Unless I'm misunderstanding something, the warning shouldn't be 
occurring. Wasn't under Registry. Also these warnings do not appear on 
every page request, so I'm wondering if it has something to do with the 
compile stage of perlrun and/or something that happens during a new 
apache process creation.

 
> 
>> first nine from daily-news.pl:
>> #!/usr/bin/perl -w
>> use strict;
>> use DBI;
>> use date_site;
>> my $dateformat = date_site::dateformat;
>> use Apache::Request;
>> 
>> use vars qw($dbh %input %output %filebase $r %sites); #vars used on $r
>> $r = Apache->request; #<--here
>> 

Thanks,

-- 
Daniel Bohling
NewsFactor Network


Re: $r and Registry(NG)* scripts

Posted by Stas Bekman <st...@stason.org>.
On Mon, 12 Mar 2001, Daniel wrote:

> Just trying to get a consensus on people's usage of the apache request
> object in Registry(NG)* scripts.
>
> I usually make the $r available as a global variable so I can use in
> various subroutines without passing it around constantly. All scripts on
> site start with:
>
> use vars qw(%input $r);
> $r = Apache->request;
>
> This has worked fine...no complaints in log files...until I switched the
> handler from Registry to RegistryNG;
>
> Now I see occasional:
> Variable "$r" will not stay shared at /home/httpd/perl/daily-news.pl
> line 9 (#1)
> in log files.

http://perl.apache.org/guide/troubleshooting.html#Value_of_x_will_not_stay_shared

> first nine from daily-news.pl:
> #!/usr/bin/perl -w
> use strict;
> use DBI;
> use date_site;
> my $dateformat = date_site::dateformat;
> use Apache::Request;
>
> use vars qw($dbh %input %output %filebase $r %sites); #vars used on $r
> $r = Apache->request; #<--here
>
>
> Any ideas on why this would happen?
>
> Thanks in advance,
>
> --
> Daniel Bohling
> NewsFactor Network
>



_____________________________________________________________________
Stas Bekman              JAm_pH     --   Just Another mod_perl Hacker
http://stason.org/       mod_perl Guide  http://perl.apache.org/guide
mailto:stas@stason.org   http://apachetoday.com http://logilune.com/
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/