Re: accessing environment variables set by other modules

Adam Prime <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
You need to use $f->r->subprocess_env in the filter.  subprocess_env is 
a RequestRec method, not a Filter method.

Adam

Chris Datfung wrote:
> On Thu, Apr 15, 2010 at 12:23 AM, Perrin Harkins <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>     The subprocess_env info that Adam sent you should have worked.  Can
>     you show us what you tried?  Can you try it in a response handler to
>     make sure it's not an odd bug with filters?
> 
> 
> Hi Perrin,
> 
> Thanks, subprocess_env works when just using a response handler. When 
> used with a filter I get the following error message:
> 
> ==================================================================
> [Thu Apr 15 11:47:34 2010] [error] [client 127.0.0.1] Can't locate 
> object method "subprocess_env" via package "Apache2::Filter" at 
> /opt/modperl//TE/ST.pm line 40.\n
> [Thu Apr 15 11:47:34 2010] [debug] core.c(3765): [client 127.0.0.1] 
> (500)Unknown error 500: default_handler: ap_pass_brigade returned 500
> [Thu Apr 15 11:47:34 2010] [error] [client 127.0.0.1] Can't locate 
> object method "subprocess_env" via package "Apache2::Filter" at 
> /opt/modperl//TE/ST.pm line 40.\n
> ==================================================================
> 
> Can I test the script to use Apache2:RequestRec for the subprocess_env?
> 
> The source of the package is as follows:
> ==================================================================
> package TE::ST;
> 
> use strict;
> use warnings;
> use Apache2::Filter ();
> use Apache2::RequestRec ();
> use Apache2::RequestIO ();
> use APR::Table ();
> 
> BEGIN { push @INC, "/opt/modperl/"; }
> 
> use Apache2::Const -compile => qw(OK);
> use constant BUFF_LEN => 1024;
> 
> sub handler 
> {
>     my $f = shift;
>     $f->subprocess_env;
>     my $envar = $ENV{TE};
> 
> 
>     unless ($f->ctx)
>     {   
>         while ($f->read(my $buffer, BUFF_LEN))
>         {
>             $buffer =~ s/It/Chris/g;
>             $buffer .= "[" . $envar . "]";
>             $f->print($buffer);
>         }
>         return Apache2::Const::OK;
>     }
> }
> 1;
> ==================================================================
> 
> Finally, the TE Apache environment variable is set in the virtual host 
> config via:
> 
> SetEnv TE TEST
>  
> Thanks,
> - Chris
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.