perl-вызов ruby-скрипта с использованием обратных кавычек ничего не возвращает

Итак, у меня есть ruby-скрипт, который берет некоторые данные с FM-сервера и возвращает кортеж. Мне пришлось сделать это, потому что я не знаю хорошего Perl FM-модуля.

[test.pl]

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

Поэтому, когда я запускаю это, он напечатает «DIAL SIP/215», как и ожидалось, но при использовании того же кода в AGI-скрипте Asterisk и использовании $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?


person cstrouse    schedule 03.06.2011    source источник
comment
Делает ли Net::FileMaker то, что вам нужно?   -  person cjm    schedule 03.06.2011
comment
Я посмотрел на Net::FileMaker, и документация кажется отстойной. Я не совсем уверен, делает ли он то, что мне нужно, или нет.   -  person cstrouse    schedule 03.06.2011
comment
@mu Да, они оба запускаются от одного и того же пользователя. Я не могу сказать вам, что в $? когда это не удается, потому что я не могу понять, как заставить скрипт AGI выводить текст на консоль Asterisk.   -  person cstrouse    schedule 03.06.2011


Ответы (1)


Я не уверен, что такое сценарий 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.)

person Schwern    schedule 03.06.2011
comment
Asterisk работает со своим собственным пользователем, поэтому я попытался поместить скрипт ruby ​​в каталог этого пользователя, и он все еще не работает. Я не понимаю, почему он отказывается работать должным образом при запуске через AGI, но отлично работает при запуске в качестве обычного perl-скрипта в CLI. - person cstrouse; 04.06.2011
comment
Может ли скрипт прочитать файл? Кроме того, STDERR из скрипта, вероятно, попадает куда-то в файл журнала, и вы его не видите. Вы можете захватить его с помощью ruby /root/rfm-query.rb $cid 2>&1. Также возможно, что $cid не то, что вы думаете. В нем могут быть пробелы и метасимволы оболочки, что приводит к неправильной командной строке. - person Schwern; 04.06.2011
comment
Я не знаю, потому что я не могу заставить его вообще что-либо выводить на консоль звездочки, чтобы я мог это видеть. - person cstrouse; 04.06.2011
comment
Если $cid не то, что я ожидал, то почему он работает в другом скрипте, содержащем такой же код? - person cstrouse; 04.06.2011
comment
Хорошо, спасибо, чувак. Добавление 2›&1 показало мне, в чем проблема. Скрипт ruby ​​найти не удалось. - person cstrouse; 04.06.2011