麻烦在perl制作rt票

时间:2013-08-01 17:41:57

标签: perl rest rt

我是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()应该创建票证。有没有人对可以提供帮助的模块有所了解?

编辑: 我在整个代码中添加了print语句:

#!/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");

在打印2行上抛出以下错误:

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

2 个答案:

答案 0 :(得分:2)

如果您的目标是通过脚本在RT中创建票证,那么在直接使用基础REST代码之前,您应该尝试另外两种方法。

如果您想调用REST API,请查看示例on the community wiki,特别是从the Perl example开始。

根据您的操作,您还可以从代码中调用rt command-line client。您可以通过键入

找到文档
/opt/rt4/bin/rt help

一旦你开始工作,你可以使用system或Perl的反引号从你的脚本中调用它。您还可以使用stand-along module在单独的计算机上安装rt命令行客户端,并可以从那里调用RT。

答案 1 :(得分: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上,这应该有助于调试。

我从你提到的'store'例程开始,然后从那里进行跟踪,找到原始HTTP响应和请求发生的位置。

Chrome等Advanced REST Client之类的工具可以帮助您测试和优化原始HTTP事务。一旦您在原始HTTP级别工作,您可能已经了解了如何在Perl API级别继续。


此外,作为the docs illustrate,您应该抓住并检查您的例外情况。在你进入store电话之前,你可能会死。就此而言,作为一种临时调试措施,您可以在每次调用之间print,作为一个简单的现实检查,脚本已经超过了每个步骤。