Mojoliciousのアプリケーションでは、リンクをクリックするとODTファイルをHTMLに変換しようとしています。シェルコマンドである "soffice"を使ってファイルを変換します。ファイルの変換には時間がかかります。私は進行状況を彼に通知するためにユーザーにステータスメッセージを送信します。 Mojo :: Logオブジェクトに書き込むことによって、これらのステータス更新メッセージを送信します。次に、私はこのログオブジェクトをEventSourceルートに登録します。MojoliciousでAnyEvent run_cmdを使用すると、「AnyEvent :: CondVar:再帰的なブロック待機が試みられました」
次に、ファイルをループし、AnyEvent :: Util run_cmdを使用して外部 "soffice"プログラムを実行します。
for my $file (@{ $filelist }) {
my $output_dir = './output_dir';
my $cmd = "soffice --headless --convert-to html --outdir '$output_dir' '$file'";
my $cv = AnyEvent->condvar;
my $w;
$w = run_cmd($cmd,
'>' => sub { my $out = shift;
&WriteToLog({ status => "cmd output '$out'..." });
undef $w;
$cv->send;
},
'2>' => sub { my $err = shift;
&WriteToLog({ status => "ERROR '$err'..." });
undef $w;
$cv->send;
}
);
$cv->recv;
}
かなりのコピーとメインAnyEventチュートリアルから貼り付け。変換するファイルがわずかしかない場合(約2または3)、すべてうまくいく。 EventSource接続を介して送信されたステータスメッセージは、クライアントブラウザに表示されます。その後、すべてのファイルが変換された後、Webページがレンダリングされます。
さらに多くのファイルを処理する場合、いくつかのファイルが変換され、スレッドタイトルのエラーメッセージが表示されます。
上記のコードを含むルートのルーティングは、このです:
my $initdocs = $r->under->to('docroute#initdocs');
$initdocs->get('/showdocs')->to('docroute#showdocs');
上記のコードは「initdocs」経路です。
何か助けていただければ幸いです。前もって感謝します。
ただ将来、[tag:perl]タグを追加すると、より多くの人々があなたのモジョールな質問を見るのに役立ちます。 –