2

好的,所以我有一个 ruby​​ 脚本,它从 FM 服务器获取一些数据并返回一个元组。我不得不这样做,因为我知道没有好的 perl FM 模块。

[测试.pl]

$ret = `ruby /root/rfm-query.rb $cid`;
@extens = split(/,/, $ret, 2);
打印“DIAL SIP/$extens[0]”;

因此,当我运行它时,它会按预期打印“DIAL SIP/215”,但是当在 Asterisk AGI 脚本中使用相同的代码并使用 $extens[0] 时,它总是不返回任何内容。

#!/usr/bin/env perl
使用星号::AGI;
$|=1;

$AGI = 新星号::AGI;
%input = $AGI->ReadParse();

$cid = substr $input{'callerid'}, 1;
$cid =~ s/\+//g;

$ret = `ruby /root/rfm-query.rb $cid`; #什么都不做
@extens = split(/,/, $ret, 2);

$AGI->exec("DIAL SIP/$extens[0]");

为什么它在测试脚本中有效,但在 AGI 中无效?

4

1 回答 1

2

我不确定 Asterix AGI 脚本是什么,但如果它像 CGI 一样,您的代码由服务器运行,那么它可能以与您不同的用户身份运行。希望它是而不是 root 并且它可能无法读取/root/rfm-query.rb

您可以通过尝试打开并打印文件以供阅读来检查这一点。

my $rfm_query_file = "/root/rfm-query.rb";
open my $fh, "<", $rfm_query_file or die "Cant open $rfm_query_file: $!";

(另外,如果你以 root 身份开发和测试代码,你会感到羞耻。)

于 2011-06-03T20:10:27.463 回答