【问题标题】:tsung_stats.pl on Mac OS X Mavericks run into "Can't locate Template.pm" errorMac OS X Mavericks 上的 tsung_stats.pl 遇到“找不到 Template.pm”错误
【发布时间】:2023-03-28 01:04:01
【问题描述】:

我正在尝试在 Mac OS X 10.9 上从 tsung(通过 brew 安装)运行 tsung_stats.pl,但出现错误:

无法在 @INC 中找到 Template.pm(@INC 包含: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /系统/库/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) 在 tsung_stats.pl 第 564 行

我搜索了一下,似乎我必须安装 perl 模板,所以我运行了“sudo cpan 模板”,但仍然得到同样的错误。

cpan 和 perl 都在 /usr/bin/ 中。 Tsung 在 /usr/local/Cellar/tsung/1.5.0/bin/tsung

版本是: perl:perl 5,版本 16,颠覆 2 (v5.16.2) cpan: 1.57 曾:1.5.0

我搜索了我的系统,没有找到文件名 Template.pm。我找到的最接近的是

中的两个 TextTemplate.pm 文件
/System/Library/Perl/Extras/5.16/Locale/Maketext/Extract/Plugin/
/System/Library/Perl/Extras/5.12/Locale/Maketext/Extract/Plugin/

以下代码 sn-p 从第 563 行开始:

sub html_report {
    require Template;
    my $titre     = 'Tsung ';
    my $version   = $tagvsn;
    my $contact   = 'tsung-users@process-one.net';
    my $output   = 'index.html';

    my $tt = Template->new({
                            INCLUDE_PATH => $template_dir,
                            PRE_CHOMP    => 1,
                            INTERPOLATE  => 1,
                           }) or die "Template error " . Template->error();
    my $xml_conf;
    opendir (DIR, ".") or warn "can't open directory .";
    while (my $file = readdir (DIR) ) {
        if ($file =~ /.xml$/) {
            $xml_conf= $file;
        }
    }
    foreach my $type ("mean", "maxmean", "minmean") {
        foreach my $data (keys % {$maxval->{$type}} ) {
            next if ($data =~ m/^size/);
            if ($data =~ m/os_mon/) {
                $maxval->{$type}->{$data} = sprintf "%.2f",$maxval->{$type}->{$data};
                next;
            }
            next if not ($data eq "session" or $data eq "connect" or $data eq "request" or $data eq "page" or $data =~ m/^tr_/);
            $maxval->{$type}->{$data} = &formattime($maxval->{$type}->{$data});
        }
    }
    foreach my $size ("size_rcv", "size_sent") {
        if ($maxval->{rate}->{$size}) {
            $maxval->{rate}->{$size} = &formatsize($maxval->{rate}->{$size}*8,"bits");
            $maxval->{maxmean}->{$size} = &formatsize($maxval->{maxmean}->{$size},"B");
        } else {
            warn "$size is equal to 0 !\n";
        }
    }

    my $vars =
        {
         version     => $version,
         os_mon      => $extra,
         errors      => $errors,
         title       => $titre,
         subtitle    => "Stats Report",
         http        => $http,
         stats_subtitle => "Stats Report ",
         graph_subtitle => "Graphs Report ",
         contact     => $contact,
         data        => $maxval,
         cat_data    => $category,
         conf        => $xml_conf
        };
    $tt->process("report.thtml", $vars, "report.html") or die $tt->error(), "\n";
    $vars =
        {
         version     => $version,
         os_mon      => $extra,
         errors      => $errors,
         http        => $http,
         match       => $match,
         async       => $async,
         bosh       => $bosh,
         title       => $titre,
         subtitle    => "Graphs Report",
         stats_subtitle => "Stats Report ",
         graph_subtitle => "Graphs Report ",
         os_mon_other=> $os_mon_other,
         contact     => $contact,
         conf        => $xml_conf,
         ext         => $imgfmt
        };
  if (not $dygraph) {
    $tt->process("graph.thtml", $vars, "graph.html") or die $tt->error(), "\n";
  } else {
    $tt->process("graph_dy.thtml", $vars, "graph.html") or die $tt->error(), "\n";
    copy (($template_dir . "/dygraph-combined.js"), ".") or die "copy failed : $!";
  }
}

我相信 $template_dir 在这段代码中(从第 71 行开始):

my $prefix ="/usr/local/Cellar/tsung/1.5.0";

unless ($template_dir) {
    if (-d (dirname($0) . "/templates/")) {
        $template_dir = dirname($0)."/templates/";
    } elsif (-d "$ENV{HOME}/.tsung/templates/") {
        $template_dir = "$ENV{HOME}/.tsung/templates/";
    } elsif (-d "${prefix}/share/tsung/templates") {
        $template_dir = "${prefix}/share/tsung/templates";
    } elsif (-d "/usr/share/tsung/templates") {
        $template_dir = "/usr/share/tsung/templates";
    } elsif (-d "/usr/local/share/tsung/templates") {
        $template_dir = "/usr/local/share/tsung/templates";
    } else {
        warn "Can't find template directory !";
    }
}

我检查了这些位置并找到了一些 .pm 文件,但没有一个是 Template.pm。

任何帮助将不胜感激。

【问题讨论】:

  • 刚刚编辑了一些代码,请指教,谢谢。
  • 我就是这么想的。这就是我运行“sudo cpan 模板”的原因。我以为那会安装 Template::Toolkit,不是吗?
  • 我尝试了 cpan Template::Toolkit 并得到“警告:无法安装 Template::Toolkit,不知道它是什么。”
  • 我决定再次尝试“sudo cpan Template”,它解决了我的问题……我上次的“sudo cpan Template”安装由于某种未知原因没有完成。

标签: macos perl osx-mavericks tsung


【解决方案1】:

在 cmets 中推断:

你需要安装Template::Toolkit。

【讨论】:

  • 要在 OS X 上执行此操作,请运行 'cpan Template::Toolkit'
  • 刚刚遇到这个确切的问题,Tsung 版本 1.6.0,操作系统版本的 Perl。这个答案是不正确的(至少对于这个版本)。正确的解决方案是sudo cpan Template,它似乎安装了所有需要的东西。
  • @robbles Template 只是 Template::Toolkit 的另一个名称。我最初确实有这个别名,但最终接管了它。
  • @Miller 感谢您的解释。只是想澄清Template::Toolkit 不能用作别名(至少在我的默认 OSX Perl 设置中)。这是预期的吗?
【解决方案2】:

对于 tsung >= 1.6 和 perl 5:

sudo cpan Template

【讨论】:

    【解决方案3】:

    只需(在 Windows 上)在 cmd 上运行以下行

    cd C:\Perl64\bin
    ppm install Template-Toolkit
    

    【讨论】:

      【解决方案4】:

      如果您尝试运行 cpan Template 或 cpan Template:Toolkit 后仍然存在此问题,请检查版本号和路径。

      文件:tsung_stats.pl 正在使用 /usr/bin/perl,如果由于某种原因您在 /usr/local/Cellar/perl 中有另一个 perl(如我),则该脚本可能永远找不到您刚刚安装的模板。

      修改文件tsung_stats.pl第一行来自:

      #!/usr/bin/perl -w

      到

      #!/usr/bin/env perl -w

      这将加载 cpan 使用的 perl 版本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 2015-06-05
        • 2013-06-11
        • 2013-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多