4.5. 故障排除

本节提供常见 Bugzilla 安装问题的解决方案。

4.5.1. Bundle::Bugzilla 让我升级到 Perl 5.6.1

尝试执行 perl -MCPAN -e 'install CPAN',然后继续。

某些旧版本的 CPAN 工具集在升级 Perl 模块方面有些幼稚。当一些模块被整合到 5.6.1 版本的核心 Perl 发行版中时,CPAN 认为更新这些模块的最佳方法是下载 Perl 发行版本身并构建它。不用说,这给几乎所有人带来了麻烦。使用上面的命令行升级到较新版本的 CPAN 应该可以解决问题。

4.5.2. DBD::Sponge::db prepare failed

由于 DBD::mysql 中的一个错误(Bugzilla 团队对此无法控制),可能会出现以下错误消息

 DBD::Sponge::db prepare failed: Cannot determine NUM_OF_FIELDS at D:/Perl/site/lib/DBD/mysql.pm line 248.
  SV = NULL(0x0) at 0x20fc444
  REFCNT = 1
  FLAGS = (PADBUSY,PADMY)

要解决此问题,请转到<perl 路径>/lib/DBD/sponge.pm在您的 Perl 安装中,并将

 my $numFields;
 if ($attribs->{'NUM_OF_FIELDS'}) {
     $numFields = $attribs->{'NUM_OF_FIELDS'};
 } elsif ($attribs->{'NAME'}) {
     $numFields = @{$attribs->{NAME}};

替换为

 my $numFields;
 if ($attribs->{'NUM_OF_FIELDS'}) {
     $numFields = $attribs->{'NUM_OF_FIELDS'};
 } elsif ($attribs->{'NAMES'}) {
     $numFields = @{$attribs->{NAMES}};

(注意添加到 NAME 的 S。)

4.5.3. cannot chdir(/var/spool/mqueue)

如果您在 SuSE Linux 或其他具有 “paranoid” 安全选项的发行版上安装 Bugzilla,则 checksetup.pl 脚本可能会失败并显示以下错误
cannot chdir(/var/spool/mqueue): Permission denied

这是因为您的/var/spool/mqueue目录的模式为 “drwx------”。以 root 身份键入 chmod 755 /var/spool/mqueue 以解决此问题。

4.5.4. Your vendor has not defined Fcntl macro O_NOINHERIT

这是由 Perl 5.6.0 发行版中包含的 File::Temp 版本中的一个错误引起的。已经报告了许多此错误的细微变体。示例可以在 图 4-1 中找到。

图 4-1. 其他 File::Temp 错误消息

Your vendor has not defined Fcntl macro O_NOINHERIT, used 
at /usr/lib/perl5/site_perl/5.6.0/File/Temp.pm line 208.

Your vendor has not defined Fcntl macro O_EXLOCK, used 
at /usr/lib/perl5/site_perl/5.6.0/File/Temp.pm line 210.

Your vendor has not defined Fcntl macro O_TEMPORARY, used 
at /usr/lib/perl5/site_perl/5.6.0/File/Temp.pm line 233.
        

许多人报告说,升级到 5.6.1 或更高版本为他们解决了问题。一个不那么复杂的修复方法是应用 图 4-2 中的补丁。该补丁也可以作为 补丁文件 提供。

图 4-2. Perl 5.6.0 中 File::Temp 的补丁

--- File/Temp.pm.orig   Thu Feb  6 16:26:00 2003
+++ File/Temp.pm        Thu Feb  6 16:26:23 2003
@@ -205,6 +205,7 @@
     # eg CGI::Carp
     local $SIG{__DIE__} = sub {};
     local $SIG{__WARN__} = sub {};
+    local *CORE::GLOBAL::die = sub {};
     $bit = &$func();
     1;
   };
@@ -226,6 +227,7 @@
     # eg CGI::Carp
     local $SIG{__DIE__} = sub {};
     local $SIG{__WARN__} = sub {};
+    local *CORE::GLOBAL::die = sub {};
     $bit = &$func();
     1;
   };