1

我是 Perl 的新手,真的很难理解如何做到这一点。我正在尝试使用 Perl 模块 RT::Client::REST 创建票证,这是我到目前为止的代码。

#!/usr/bin/env perl

use strict;
use warnings;
use RT::Client::REST;
use Rt::Client::REST::Ticket;

my $rt = RT::Client::REST->new(
    server => ($ENV{RTSERVER} || 'http://rt.myrturl.com'),
);
$rt->login(
    username => 'user',
    password => 'pass',
);

my $ticket = RT::Client::REST::Ticket->new(
    rt => $rt,
    queue => "General - unassigned",
    subject => "Perl Create Ticket Test",
);

$ticket->store("I'm a ticket");

这段代码没有出票,我不知道如何从 Perl 获得任何良好的调试输出。根据RT::Client::REST::Ticket的 RT::Client::REST 文档, $ticket->store() 应该创建票证。有没有人熟悉可以提供帮助的模块?

编辑:我在整个代码中添加了打印语句,如下所示:

#!/usr/bin/env perl

use strict;
use warnings;
use RT::Client::REST;
use Rt::Client::REST::Ticket;

my $rt = RT::Client::REST->new(
    server => ($ENV{RTSERVER} || 'http://rt.myrturl.com'),
);
print "1";
$rt->login(
    username => 'user',
    password => 'pass',
);
print "2";
my $ticket = RT::Client::REST::Ticket->new(
    rt => $rt,
    queue => "General - unassigned",
    subject => "Perl Create Ticket Test",
);
print "3";
$ticket->store("I'm a ticket");

在 print 2 行抛出以下错误:

Unknown code ref type given ''. Check your usage & try again at CreateRTTicket.pl line 19
4

2 回答 2

2

如果您的目标是通过脚本在 RT 中创建票证,那么在直接使用底层 REST 代码之前,您可能应该尝试其他两种方法。

如果您想调用 REST API,请查看社区 wiki 上的示例,特别是从Perl 示例开始。

根据您正在执行的操作,您还可以从代码中调用rt 命令行客户端。您可以通过键入查找文档

/opt/rt4/bin/rt help

一旦你得到它的工作,你可以从你的脚本中调用它,system或者使用 Perl 的反引号。您还可以使用独立模块在单独的机器上安装 rt 命令行客户端,并可以从那里调用 RT。

于 2013-08-05T13:03:30.867 回答
1

如果您还没有,请在树中制作 RT/client/REST.pm 的私有副本。打开它一个编辑器并找到sub _submit. 请参阅其中的这些行:

# Then we send the request and parse the response.
#DEBUG(3, $req->as_string);
my $res = $self->_ua->request($req);
#DEBUG(3, $res->as_string);

取消注释这些DEBUG行,然后再次尝试您的脚本。您应该会看到您的原始 HTTP 请求和响应出现在 STDERR 上,这应该有助于调试。

我从您提到的“存储”例程开始找到了这一点,然后从那里跟踪以查找原始 HTTP 响应和请求发生的位置。

Chrome 的Advanced REST Client之类的工具可以帮助您测试和优化原始 HTTP 事务。一旦你让它在原始 HTTP 级别工作,你可能会理解如何在 Perl API 级别进行操作。


此外,正如文档说明的那样,您应该捕获并检查您的异常。你可能还没接到store电话就快死了。就此而言,作为一种临时调试措施,您可以print在每次调用之间进行一些操作,作为简单的现实检查脚本是否已通过每个步骤。

于 2013-08-01T18:17:32.000 回答