我是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
答案 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
,作为一个简单的现实检查,脚本已经超过了每个步骤。