Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中生成rt票据时遇到问题_Perl_Rest_Rt - Fatal编程技术网

在perl中生成rt票据时遇到问题

在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

我是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 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)
。它将包含您已加载的所有模块的路径。如果您正在加载全局副本,您将看到它的路径。这也不会改变我的输出