2

わかりました。FM Server からデータを取得してタプルを返す Ruby スクリプトがあります。私が知っている良い perl FM モジュールがないので、私はこれをしなければなりませんでした。

[test.pl]

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

したがって、これを実行すると、期待どおりに「DIAL SIP/215」が出力されますが、アスタリスク 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`; #rets何も
@extens = split(/,/, $ret, 2);

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

テスト スクリプトでは機能するのに、AGI では機能しないのはなぜですか?

4

1 に答える 1

2

Asterix AGI スクリプトが何であるかはわかりませんが、コードがサーバーによって実行されている CGI のようなものであれば、おそらくあなたとは別のユーザーとして実行されています。うまくいけば、ルートではなく、おそらく読み取ることができません/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: $!";

(また、ルートとしてコードを開発およびテストしている場合は恥を知れます。)

于 2011-06-03T20:10:27.463 に答える