2012-03-07 1 views
3

誰もがこのようなことを光栄に思っているので、私はこれがダムの質問であると感じます。どのようにdelayed_jobからの出力を得るか、例えばPDF/HTMLレポート

私の必要性は簡単です - 私はHerokuでRuportを使用していくつかのレポートを実行しています。複雑なレポートは時間がかかり、タイムアウトします。 delayed_jobを使うことに決めましたが、代わりに何かを使うことができました。私がやっていることが分かれば、他のものにも使うかもしれない。

私はdelayed_jobとその兄弟を立ち上げ、実行する方法、ジョブキューを管理する方法などに関する多くの例、railscasts、ドキュメントを参照しています。 ..

どのように私は私の待ち行列の仕事に戻ってくるのですか?

今、私はちょうどこのような出力を生成:

@report_output  = @report_controller.render(@report_format,@report_params) 
send_data @report_output, :filename => "#{@report_type}.#{@report_format}", :type => "application/#{@report_format}" unless :html == @report_format 

を(そして、それはHTML形式のレポートであれば、その後、それだけで正常にページをレンダリング)

それは開発に正常に動作し、回生産中に私はドキュメントから出力を生成してユーザにメールするのはかなり簡単なので、仕事を元に戻す心配はありません。

しかし、私はそれを望んでいません。私は、ユーザーに進行状況ページを表示し、完了するまでサーバーを定期的にポーリングしてから、HTMLまたはPDF出力を表示するようにリダイレクトします。私はこれが仕事のIDの何らかの種類を返して、彼らがそれをチェックできるようにユーザに戻すことを期待していますが、どこから来たのか分かりません。私はテーブルを見ることができると思うが、それはばかげているようだ。私は場合によっては、キューに入れられた/完了したジョブのリストをユーザーに表示し、手動で選択させることもできますが、それは残酷です。彼らはただレポートをダウンロードしたいだけで、1〜2分かかっても気にしません。

実際にレポート用にテーブルを使用しているわけではありません。必要はありません。保存されていませんが、テーブルとActiveRecordモデルを使用すれば助かります。私はそれをしなければならないようには思われません。私はRails 2.3を使用していますが、それは私の質問にも関係があります。

私が求めているように、誰もそれを書き留めて気にしないように見えるようですが、見つけられないようです。サンプルアプリはありますか?私は何が欠けていますか?私は愚かだと感じる。

答えて

0

ここでは、ルポルト生成の結果を保存していますか? S3ストレージのようにディスクのどこかに置くと、レポートの名前を事前に生成してクライアントに戻すことができます。ファイルが存在する場合はS3ストレージをポーリングしてから、作成が完了したらクライアントにストリームすることができます。キューにそれを置くときに、ジョブのIDを取り戻すように見える

EDIT

:私は鉄のために働く:polling with delayed_job

+0

私は、「私は彼らがテーブルとActiveRecordモデルを手伝ってくれればと思っています」と言っていました.-私はReportGenレコードを生成し、新しいレコードを作成し、そこに状態とファイル名を格納して、ユーザーがそれをポーリングできます。 (a)これ以上のように聞こえるはずですが、(b)他の誰かのサンプルコードが見つからないのはなぜですか? 私はそのレコードがジョブのID番号を持っていると思うので、後でハングしたジョブを削除/クリーンアップできますか?私はどこからそれを手に入れますか?そして、なぜ私はそれを手に入れることができませんか? –

1

あなたは(免責事項鉄工​​のようなホストされたバックグラウンド処理サービスを使用することができます。 io)。 IronWorkerにジョブを渡し、バックグラウンドでジョブを処理している間にワーカーにステータスを更新させます。その後、IronWorkerをポーリングしてユーザーにステータスを表示し、完了したらページを更新できます。ワーカーからのコールバックを使用して、ワーカーとアプリケーションを同期させることもできます。これを手伝ってうれしいです。

+0

これを行う方法を示すサンプルコードがありますか? –

+1

こんにちは@ stephan.com、このサンプルアプリケーションでは、進捗状況を設定して取得する方法を示しています:https://github.com/iron-io/heroku_sinatra_example tweet_worker.rbの設定方法とhello.rbの表示方法それを得る。 hello.erbには、UIに表示する方法を示すいくつかのAjaxがあります。 –

関連する問題