Perl CGI Scripts在库中找不到模块

时间:2011-01-25 23:46:30

标签: perl apache cgi perl-module

这是我遇到的Apache / Perl问题。

我在perl CGI应用程序中使用CPAN模块。它是Spreadsheet :: ParseExcel

我已经用tar.gz文件安装了cpan模块。

我已经安装了依赖项。

但是,我确实以非root用户身份执行了此操作。包含这些文件的库位于用户文件夹/ home / user / lib

现在,我已在此框中成功配置了Apache2。 html目录是/ var / www / html,cgi文件夹是/ var / www / html / cgi-bin。我已经验证它们有效,因为该文件夹中不需要特殊模块的所有脚本都在我的firefox浏览器中工作,即。你好世界,数据转储,简单形式。

但是,当我尝试运行使用“Spreadsheet :: ParseExcel”的脚本时,我收到错误,即在@INC中找不到该模块。但是,我在添加库的脚本开头有一个“use lib”语句。

脚本可以在PUTTY中运行而不会出现问题。只有在从浏览器运行脚本时我才会遇到问题。

此Web应用程序是在另一个盒子上编写的,并且可以在该盒子上正常工作。因为我当然在那里发展。我把Apache2放在我的个人Ubuntu机器上,并在这里安装了Web应用程序和模块,它可以在我的本地盒子上运行。

我已将“chmod -R a + rx”设置为用户库文件夹,因此我认为Apache可以访问该文件夹,除非父目录的设置阻止它?我不必在/ home / user文件夹上运行它,或者更糟糕的是/ home文件夹,是吗?

有关此问题的任何见解?

谢谢大家的时间!

2 个答案:

答案 0 :(得分:3)

如果Apache用户无法访问/ home / user,则无法访问/ home / user / lib,即使/ home / user / lib上的权限允许它访问它。

例如,如果你在/ root中拥有一个文件,如果你没有访问/ root,你仍然无法访问它。

答案 1 :(得分:1)

这里有两个想法:

  1. 错误地说错误模块中的@INC是什么,它是否包含您通过use lib添加的路径?
  2. Apache运行的用户是否可以访问此目录?通常,主目录具有拒绝其他帐户遍历的权限。从模块目录一直检查权限,确保o至少对于模块的所有目录和文件至少为r-x。