2009-10-28 18 views
7

私は遅延ジョブを使ってバックグラウンド作業を管理しています。
しかし、定期的に実行する必要のあるタスクがいくつかあります。毎時、毎日、または毎週など。通常の遅延ジョブ

今のところ、私がタスクを実行すると、私は1日/週/月に実行される新しいタスクを作成します。

しかし、私は本当に好きではありません。何らかの理由でタスクが完全に実行されていない場合は、次のタスクを作成せず、タスクの実行を失う可能性があります。

あなたの定期的なタスクリストが正しいことを確認するために、あなたのレールアプリでそのような種類のもの(遅れた仕事で)をどうやって管理しますか?

答えて

5

あなたはクーロンへのアクセス権を持っている場合は、私は非常たび

http://github.com/javan/whenever

をお勧めしますあなたが死んで単純ルビで実行され、どのような頻度でしたいかを指定し、消耗品はにこれを変換するための作業をすくいたびcrontabを実行し、システムのcrontabを更新します。

私はHerokuにいるので、頻繁にcronにアクセスできない場合は、DJが行く方法です。

あなたには2つのオプションがあります。

  1. 何をしているのですか? DJは各タスクを一定回数何度もやり直しますので、そこにいくつかの緩みがあります

  2. 次のDJジョブを作成するコードを保証ブロックに入れて、例外やその他の悪いイベントの後でも作成されるようにします

  3. 定期的に実行される別のDJを作成し、適切なDJが存在することを確認し、そうでない場合は作成します。もちろん、モニターと実際のDJが同じenvで動作しているので、これは他のオプションと同じようにエラーが発生しやすいですが、それは何かです。

+0

いつでも良いことです。私が何かを変更したときにcrontabをリロードできるようにするためのタスクがいくつかあります(私はタスクを動的に変更する必要があります)。ありがとう:) –

1

この種のものにcronを使用しない理由は何ですか? rufus-schedulerのようなもっとルビーのようなもの、それはかなりeasy to useで非常に信頼できます。

キューイングが必要ない場合は、これらのツールを使用する方法があります。

+1

私はすでに遅延ジョブdeamonを持っています。そして、私は2番目の起動を避けたいと思います。 –

+0

rufus-schedulerで新しいデーモンを起動する必要はありません。単純なループまたはEventMachineを使用して、実行するジョブをチェックします。 cronはデーモンですが、通常は起動して実行する必要があります。 –

関連する問題