2012-03-26 14 views
13

非常に長い実行中のレーキタスクを実行することに興味があります。これは完了するまでに数時間かかることがあります。この問題を処理するためのベストプラクティスについて知りたいと思っています。非常に長い実行中のレーキタスクを扱う

    cronジョブを設定し
  1. delayed_job
  2. resque

のcronを設定するための簡単な解決策のように思えるが、それは理想的です:私が見つけた

可能な解決策非常に長い仕事ですか?何を使用し、ソリューションの利点/短所は何ですか?

答えて

30

個人的に私はResqueが大好きです。長時間実行または定期的なタスクを処理するためにresque-scheduler gemを使用できます。

タスクを頻繁に実行する必要がない場合は、rakeタスクを悪用して、SSHセッションが終了した場合でも実行され続けることを確認できます。

nohup rake my:task & 

nohupはあなたがタスクを実行したディレクトリにnohup.outに出力を送信し、また第二に&が実行され、プロセスが死ぬことなく、あなたのsshセッションを残すようになる:

このような何かを試してみてくださいそれはデアモンとして。

+0

これは私のニーズを完全に満たすように見えます。私は他の人の声を聞くことを受け入れる前に、この質問を少しだけ開いたままにしておきます。ありがとう! –

+0

問題ありません!私はあなたが探している解決策を見つけることを願っています!一度見つけたら、あなたのソリューションを投稿してください! –

1

作成した1つのアプリケーションでは、アップロード時にプレビュー画像を作成するためにサムネイル化されたPDFをアップロードする機能がありました。 PDFが非常に大きくなる可能性があるため、サムネイル作成にはしばらく時間がかかり、バックグラウンドで実行する必要がありました。これを行うには、私は、バックグラウンド・プロセスへ

  • ワーカーキューを処理するために、Redisに裏打ちされたResque、および
  • をサムネイルをハンドオフするためにアップロードする

    • Paperclip
    • delayed_paperclip宝石を使用しました
    • God gem、Redis and Resqueワーカーを起動し、シバン全体を監視します。

    面白いのは、Resque GUIを使って作業者を表示することです。そこでは、暴走しているプロセス(非常に多く発生する傾向があります)を監視してImageMagickでPDFを処理しているときに少しだけ)、全体の安定性と信頼性が大幅に向上します。

    マイナス側では、それはcronジョブよりも設定するのがずっと難しいです。しかし、cronが長い時間、メモリを消費するプロセスを実行することは、私には災害のレシピのように見えます。

    希望に役立ちます!

    関連する問題