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