在perl中生成rt票据时遇到问题
我是Perl新手,很难理解如何做到这一点。我正在尝试使用Perl模块RT::Client::REST创建一个票证,以下是我到目前为止的代码在perl中生成rt票据时遇到问题,perl,rest,rt,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://r
#!/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 at的文档,$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");
在打印2行上引发以下错误:
Unknown code ref type given ''. Check your usage & try again at CreateRTTicket.pl line 19
如果尚未创建,请在树中创建RT/client/REST.pm的私有副本。在编辑器中打开它并找到
sub\u 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
行的注释,然后重试脚本。您应该可以在STDERR上看到原始HTTP请求和响应,这将有助于调试
我是从您提到的“存储”例程开始发现这一点的,只是从那里开始跟踪,以找到原始HTTP响应和请求发生的位置
类似于for Chrome的工具可以帮助您测试和优化原始HTTP事务。一旦它在原始HTTP级别上工作,您可能会了解如何在PerlAPI级别上继续工作
同样,您应该捕获并检查异常。你甚至还没来得及打电话到
商店
就要死了。因此,作为一种临时调试措施,您可以在每次调用之间打印一些内容,作为一个简单的实际检查,以确保脚本已经通过了每个步骤 如果您的目标是从脚本在RT中创建票据,那么在直接使用底层REST代码之前,您可能还应该尝试另外两种方法
如果您想调用RESTAPI,请看一下示例,特别是从
根据您正在执行的操作,还可以从代码中调用。您可以通过键入来查找文档
/opt/rt4/bin/rt help
一旦你开始工作,你可以使用system
或者Perl的backticks从你的脚本中调用它。您还可以使用在单独的计算机上安装rt命令行客户端,并可以从那里调用rt。您是指rt::client::REST::Ticket中的状态字段吗?重新Perl调试:Perl-d myScript.pl
。您建议的更改不会为meAre生成任何不同的输出您确定正在加载私有,RT::Client::REST的修改副本,而不是全局副本?您可以尝试转储全局@INC
和%INC
变量以确保安全。可能需要添加指向您的私有目录的显式use lib
行。如果您是服务器上的唯一用户,也可以直接修改gobal副本。一旦确定要修改实际使用的模块副本,可以随意添加其他DEBUG
或对代码进行简单的warn
调用,以缩小范围。好的,我对Perl不是很熟悉,那么在哪里可以找到全局副本呢?添加到代码中:use Data::Dumper;警告转储程序(\%INC)
。它将包含您已加载的所有模块的路径。如果您正在加载全局副本,您将看到它的路径。这也不会改变我的输出