2011-06-03 91 views
2

好了,我有一個從FM服務器抓取一些數據,並返回一個元組的Ruby腳本。我不得不這樣做,因爲我沒有意識到的perl FM模塊。perl的調用Ruby腳本使用反引號沒有返回

[test.pl]

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

所以,當我運行這個它會打印出 「DIAL SIP/215」 的預期,但在使用Asterisk的AGI腳本相同的代碼時,用$ EXTENS [0 ]它總是什麼都不返回。

 
#!/usr/bin/env perl 
use Asterisk::AGI; 
$|=1; 

$AGI = new Asterisk::AGI; 
%input = $AGI->ReadParse(); 

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

$ret = `ruby /root/rfm-query.rb $cid`; #rets nothing 
@extens = split(/,/, $ret, 2); 

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

爲什麼它在測試腳本中工作,但不在AGI中?

+0

確實[網::的FileMaker(http://search.cpan.org/dist/Net- FileMaker /)做你正在尋找什麼? – cjm 2011-06-03 19:32:29

+0

我看着Net :: FileMaker,文檔似乎很糟糕。我不確定它是否滿足我需要或不需要。 – cstrouse 2011-06-03 19:47:35

+0

@mu是的,他們都是作爲同一個用戶運行。我不能告訴你什麼是$?當它失敗時,因爲我無法弄清楚如何讓AGI腳本將文本輸出到Asterisk控制檯。 – cstrouse 2011-06-03 19:48:32

回答

2

我不知道的阿斯特里克斯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: $!"; 

(另外,可恥的是你,如果你正在開發和測試的代碼爲根。)

+0

Asterisk以自己的用戶身份運行,所以我嘗試將ruby腳本放入該用戶的目錄中,但它仍然無效。我不明白爲什麼它通過AGI運行時拒絕正常工作,但在CLI上作爲普通perl腳本運行時工作正常。 – cstrouse 2011-06-03 20:18:18

+0

腳本能否讀取文件?另外,腳本中的STDERR可能會進入某處的日誌文件,但您沒有看到它。你可以用'ruby /root/rfm-query.rb $ cid 2>&1'來捕獲它。它也有可能是'$ cid'不是你想象的那樣。它可能具有導致命令行不正確的空格和shell元字符。 – Schwern 2011-06-03 20:26:30

+0

我不知道,因爲我無法在星號控制檯上輸出任何內容以供我查看。 – cstrouse 2011-06-03 20:29:34