0

我最近升级了 bugzilla [on Debian GNU/Linux 6.0.3 (squeeze)](到最新版本,虽然它似乎可以工作,但我有一个外部脚本用于将它与 PlasticSCM 源代码控制集成,它给出了以下错误:

Can't locate Email/Sender/Simple.pm in @INC (@INC contains: . /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl) at Bugzilla/Mailer.pm line 27.

堆栈跟踪一直到我的自定义脚本。但我认为这无关紧要。

Bugzilla/Mailer.pm 中的第 27 行说:

use Email::Sender::Simple qw(sendmail);

我认为问题在于
认为问题在于模块 Email::Sender::Simple 丢失了。

Bugzilaa 有一个名为的脚本./checksetup.pl,用于检查是否满足所有先决条件。当我尝试运行此脚本时,它并不表示缺少任何内容。

但是,当它确实找到缺少的库时,它会给出使用带有结构的命令添加它们的说明:

 /usr/bin/perl install-module.pl HTML::FormatText::WithLinks

所以我执行了:

 /usr/bin/perl install-module.pl Email::Sender:Simple

其中说:

Checking for                 CPAN (v1.81)     ok: found v1.9402
Checking for                 YAML (any)       ok: found v1.15
Checking for   ExtUtils-MakeMaker (v6.31)     ok: found v7.1
CPAN: Storable loaded ok (v2.20)
Going to read '/MYUSERNAME/.cpan/Metadata'
  Database was generated on Mon, 30 Nov 2015 07:17:02 GMT
Installing Email::Sender:Simple version 1.300021...
Email::Sender::Simple is up to date (1.300021).

所以看起来它安装了模块,但再次运行 CGI 脚本会产生完全相同的堆栈跟踪。

同样再次运行install-module.pl脚本会再次返回相同的结果(就像它刚刚再次安装它一样......)。

我怎么知道这个模块是否安装(以及在哪里),我可以做些什么来使我的脚本工作?

更新:我想我知道问题出在哪里。
我尝试运行的 cgi 脚本的第一行包含以下行:

#!/usr/bin/perl -wT

从这里开始: https ://stackoverflow.com/a/2526809/25412 我知道 T 标志.不会成为@INC 的一部分(即 Perls 模块搜索路径),所以这就是为什么lib我的 bugzilla 的安装文件夹(其中也是 cgi 所在的位置)未使用,并且其中的文件 lib/Email/Sender/Simple.pm 被 CGI 忽略。

所以更新后的 Q是 - 我应该:
1.T从 cgi 的第一行删除?或
2. 以某种方式(以及如何?)将 EMAIL::Sender::Simple 安装到属于 @INC 的其他位置?

我倾向于认为答案应该是 2 因为我认为 T 标志是出于某些安全原因,因为此页面显示

“对于代表您可能不一定信任的其他人运行的程序(例如 CGI 程序或您可能用 Perl 编写的任何 Internet 服务器),显式打开它们是一个好主意。”

4

1 回答 1

1

您可以使用以下命令检查模块的安装路径:

perldoc -l Email::Sender::Simple

如果未安装,它将给出以下输出:

No documentation found for "Email::Sender::Simple".

否则它将给出该模块的完整路径。

于 2015-11-30T11:05:32.533 回答