7

バックグラウンド作業を管理するためにDelayedJobを使用しています。
ただし、定期的に実行する必要のあるタスクがいくつかあります。たとえば、毎時、毎日、毎週。

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

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

Railsアプリでそのようなことを(ジョブが遅れて)どのように管理して、通常のタスクリストが正しいままであることを確認しますか?

4

2 に答える 2

5

Cronにアクセスできる場合は、いつでもお勧めします

http://github.com/javan/whenever

何をどのくらいの頻度で実行したいかを非常に単純な Ruby で指定し、これを crontab に変換してシステムの crontab を更新する rake タスクを提供するたびに指定します。

頻繁に cron にアクセスできない場合 (Heroku を使用しているため、私もそうではありません)、DJ が最適です。

いくつかのオプションがあります。

  1. あなたがしていることをしてください。DJ は各タスクを一定回数再試行するため、ある程度の寛大さが必要です。

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

  3. 定期的に実行する別の DJ を作成し、適切な DJ が存在することを確認し、存在しない場合は作成します。もちろん、モニターと実際の DJ の両方が同じ環境で実行されているため、これは他のオプションと同様にエラーが発生しやすくなりますが、それは問題です。

于 2009-10-28T13:46:27.617 に答える
1

この種のものにcronを使用しない特定の理由はありますか? あるいは、 rufus-schedulerのようなもっとルビっぽいものもあるかもしれません。これは非常に使いやすく、非常に信頼性があります。

待ち行列が必要ない場合は、これらのツールを使用するとよいでしょう。

于 2009-10-28T13:38:46.527 に答える