perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stas Bekman <s...@stason.org>
Subject Re: [mp2 bug] Perl*Env issues
Date Wed, 15 Dec 2004 00:22:25 GMT
Pratik wrote:
> I am having the following apache configuration file.
> 
> ==============================
> % cat ~/lab/mp2/test/httpd.conf
> ServerRoot "/home/pvnaik/lab/mp2/test"
> Timeout 300
> DocumentRoot "/home/pvnaik/lab/mp2/test/webdocs"
> ErrorLog logs/error_log
> Listen 44951
> 
> PerlModule Apache2
> 
> <Perl>
> ;
> </Perl>
> 
> PerlSetEnv MyVar "Hello"
> 
> <Perl>
> print "HELLO = ", $ENV{MyVar}, "\n";
> </Perl>
> 
> ==============================
> 
> Now, the output is :
> 
> ==============================
> % ~/lab/mymp2/mp2/bin/httpd -X -f ~/lab/mp2/test/httpd.conf
> HELLO = 
> HELLO = 
> ==============================
> 
> This is happening because, initialization of %ENV will take place when
> the first <Perl>..</Perl>. And all the subsequent PerlPassEnv and
> PerlSetEnv values will be stored only in scfg->SetEnv table and won't
> be copied to %ENV.
> 
> This issue was previously discussed at
> http://gossamer-threads.com/lists/modperl/dev/7256
> 
> The same patch would be something like below now :
> 
> ==============================
> % diff -u modperl_cmd.c~ modperl_cmd.c
> --- modperl_cmd.c~      2004-12-14 03:12:14.000000000 -0800
> +++ modperl_cmd.c       2004-12-14 09:35:47.000000000 -0800
> @@ -545,6 +545,8 @@
>          ENTER;SAVETMPS;
>          save_scalar(gv); /* local $0 */
>          sv_setpv_mg(GvSV(gv), directive->filename);
> +       /* Populate %ENV */
> +        modperl_env_configure_server(aTHX_ p, s); 
>          eval_pv(arg, FALSE);
>          FREETMPS;LEAVE;
>      }
> ==============================
> 
> This patch seems to be working fine for me. But probably, calling
> modperl_env_configure_server() for every eval_pv would be a bit
> costly.
> 
> Another option may be to call modperl_env_hv_store():modperl_env.c
> from MP_CMD_SRV_DECLARE2(set_env) and MP_CMD_SRV_DECLARE(pass_env) of
> modperl_cmd.c.

Another option is not to use <Perl> sections for anything but Apache 
config. do you need to have this <Perl> section that you've the problem 
with during config phase? If not move it into post_config phase and your 
problem is solved.

Another alternative is to drop:

PerlSetEnv MyVar "Hello"

and instead use:

<Perl>
$ENV{MyVar} = "Hello";
</Perl>

PerlSetEnv was originally designed to make Env setting be visible before 
the response phase (which is what SetEnv did). So I think you are simply 
misusing this feature and the doc should just say, that PerlSetEnv takes 
effect only in post_config phase and drop any semi-complete support in 
<Perl> sections (i.e. dropping modperl_env_configure_server() completely).

-- 
__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Mime
View raw message