1

各ユーザーのカスタム スケジュールで小さなタスクを実行する必要がある Rails 3 アプリケーションを作成しています。スケジュールされたタスクは動的に定義されます。現在、私の計画は、redis で resque スケジューラを使用することです。

特定のタスクのスケジュールを設定したら (たとえば、タスク A を 48 時間ごとに実行するなど)、そのタスクを無期限に実行したいと考えています。したがって、これらのスケジュールをデータベースなどに保存したいので、再起動時にアプリがクラッシュした場合に備えて、それらのタスクを再度キューにロードします。

これは Resque が redis に保存することでデフォルトでサポートするものですか、それとも独自のカスタムのものを作成する必要がありますか? ruby-taskr (http://code.google.com/p/ruby-taskr/) も調べていました。taskr がデータベースへの保存と起動時の登録をサポートしているかどうかわかりません。

また、私が見ることができるアプリケーション/デモがあれば助かります。

ありがとう

4

1 に答える 1

1

バッチジョブにも同様の設定があります。ユーザーがそれらを Web ダッシュボードに追加すると、指定された頻度で実行されます。

私はアクティブ レコードを使用してスケジューリング定義を保存し、実行には resque を使用し、rake タスクを使用してキューに入れるには 1 つの cron エントリを使用します。

そのため、rake タスクでは次のようになります。

to_run = Report.daily
to_run += Report.weekly if Time.now.monday?
to_run += Report.monthly if Time.now.day == 1

to_run.each{|r| r.enqueue!}

ここで、daily、weekly、monthly はモデルの名前付きスコープです。

class Report < ActiveRecord::Base
  scope :daily, where(:when_to_run => 'daily')
  scope :weekly, where(:when_to_run => 'weekly')
  scope :monthly, where(:when_to_run => 'monthly')
end

これは少しハックですが、うまく機能し、うまくスタック内にとどまります。役に立つことを願っています

于 2011-05-05T15:51:31.660 に答える