0

我已经在 Tomcat 中设置了 CGI,它对于我的一个测试脚本运行良好。现在我正在尝试使用 DBD/Oracle.pm 的更复杂的脚本,当我检查 catalina.log 时,它向我抛出了以下错误:

StandardContext[/TestApp]cgi: runCGI (stderr):Can't locate Oracle.pm in @INC (@INC contains: ....)

当我检查 @INC 内部的内容时,我确实注意到它缺少 Oracle.pm 所在的路径。但是,当我对命令执行 perl -V 时,我看到 @INC: /usr/local/oracle/oraperllib/ 。 ..

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

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

谢谢!

4

3 回答 3

0

当您从命令行运行 Perl 时,您可能会从某个地方(例如您的.bashrc文件)获取 Oracle.pm 的非标准路径。

当 Web 服务器运行 CGI 脚本时,它可能不会选择相同的环境变量。将“Oracle.pm”移动到标准路径中,或在 CGI 脚本中明确“使用”该路径:

use lib '/usr/local/oracle/oraperllib/';
于 2012-08-30T20:26:52.510 回答
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 并且不会传递您的环境变量。

于 2015-05-08T00:06:22.047 回答
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 一样。

于 2018-04-04T14:41:14.233 回答