【问题标题】:trouble making rt tickets in perl在 perl 中制作 rt 票的麻烦
【发布时间】:2013-08-01 17:41:57
【问题描述】:

我是 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

【问题讨论】:

  • 你是指RT::Client::REST::Ticket中的status字段吗?
  • 重新 Perl 调试:perl -d myScript.pl.

标签: perl rest rt


【解决方案1】:

如果您的目标是通过脚本在 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。

【讨论】:

    【解决方案2】:

    如果您还没有,请在您的树中制作 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 响应和请求发生的位置。

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


    另外,作为the docs illustrate,您应该捕获并检查您的异常。你可能还没接到store 电话就快死了。就此而言,作为一种临时调试措施,您可以在每次调用之间print 一些东西,作为一个简单的现实检查脚本是否已通过每个步骤。

    【讨论】:

    • 您建议的更改对我没有产生任何不同的输出
    • 您确定要加载 RT::Client::REST 的私有修改副本,而不是全局副本吗?您可以尝试转储全局 @INC%INC 变量来确定。可能需要添加指向您的私有目录的显式use lib 行。如果您是服务器上的唯一用户,您也可以只修改全局副本。一旦确定要修改实际使用的模块副本,请随时添加其他 DEBUG 或只是简单的 warn 调用代码以缩小范围。
    • 好的,我对 Perl 不是很熟悉,那么在哪里可以找到全局副本?
    • 添加到您的代码:use Data::Dumper; warn Dumper (\%INC)。它将包含您已加载的所有模块的路径。如果正在加载全局副本,您将看到它的路径。
    • 这也不会改变我的输出
    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2011-03-17
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多