我最近升级了 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 服务器),显式打开它们是一个好主意。”