Tomcat中CGI的环境变量

时间:2012-08-30 19:36:32

标签: perl tomcat

我在Tomcat中设置了CGI,它可以运行我的一个测试脚本。现在我正在尝试使用DBD / Oracle.pm的更复杂的脚本,当我检查catalina.log时,它会给我带来以下错误:

StandardContext [/ TestApp] cgi:runCGI(stderr):无法在@INC中找到Oracle.pm(@INC包含:....)

当我检查@INC里面的内容时,我注意到它缺少了Oracle.pm所在的路径。但是,当我按命令执行perl -V时,我看到了 @INC: 在/ usr /本地/ ORACLE / oraperllib / ...

这是Oracle.pm所在的缺失路径。

Tomcat是否使用不同版本的perl?如果是,我该如何配置?

谢谢!

3 个答案:

答案 0 :(得分:0)

当您从命令行运行Perl时,您可能会从.bashrc文件等某个位置获取Oracle.pm的非标准路径。

当Web服务器运行CGI脚本时,它可能没有获取相同的环境变量。将“Oracle.pm”移动到标准路径中,或者明确地“使用”CGI脚本中的路径:

use lib '/usr/local/oracle/oraperllib/';

答案 1 :(得分:0)

我遇到了同样的问题,马克关于PERL5LIB的提示就是我所需要的。但是需要迈出关键的一步:

在web.xml中将 passShellEnvironment 设置为true,即在cgi servlet配置中:

<init-param>
    <param-name>passShellEnvironment</param-name>
    <param-value>true</param-value>
</init-param>

请参阅关于此的tomcat文档:https://tomcat.apache.org/tomcat-7.0-doc/cgi-howto.html#Configuration。默认情况下,此选项设置为false,并且不会传递您的环境变量。

答案 2 :(得分:0)

Python配置和Tomcat安装到Mac的相同问题......

  • Unix系统是对名称exec程序的区分大小写的警告

     <init-param>
          <param-name>executable</param-name>
          <param-value>/Library/Frameworks/Python.framework/Versions/3.6/Python</param-value>
     </init-param>
     <init-param>
          <param-name>passShellEnvironment</param-name>
          <param-value>false</param-value>
        </init-param>    
    

    相同的结果
        <init-param>
          <param-name>executable</param-name>
          <param-value>Python</param-value>
        </init-param>
        <init-param>
          <param-name>passShellEnvironment</param-name>
          <param-value>true</param-value>
        </init-param>
    

但是第二个对于避免安装新的python版本问题更有效率

没有错误但没有脚本的执行只是一个用于保存的窗口或者如果脚本有一些错误则打开脚本。 如果没有错误就可以工作 在脚本的第一行使用#!/ usr / bin / env python3.6。

所以一定要和perl一样。