2011-10-18 9 views
1

モデルXのafter_createコールバックにcrontabエントリを挿入するために、(https://github.com/javan/whenever)ruby gemを使用するときはいつでも使用します。このエントリは、ジョブが45分ごとに実行されるように指示します。しかし、私は彼が時間間隔を指定することができるユーザーにコントロールを与えたい。したがって、このプロセスは次のようになります。可変間隔でRakeタスクを実行する

  1. ユーザーはモデルXを作成し、45分後にジョブを実行するcrontabエントリを挿入します。
  2. ユーザーは、45分では不十分であると判断し、UIから30分に時間間隔を変更できるようにしたいと考えています(これはHTML/UIコントロールで行うことができます)。
  3. 後で、彼は任意の回数の時間間隔を変更することができるはずです。

私たちがこれを達成する方法についての宝石やアイデアは感謝しています。私はあらゆるバージョンのレールを公開しており、この機能は機能の中核を形成するので、誰でも実装を開始することができます。

ありがとうございました。

答えて

4

私はあなたのソリューションのアプローチが嫌いです。これは、将来アプリケーションに2kユーザーがいる場合、2k crontabを開始することを意味しますか?

ユーザーごとに1つのcrontabを作成するのではなく、1分ごとに作成するだけです。ユーザモデルに、そのユーザのcrontabフリークエンシーについての情報と、crontabが最後に実行された時間に関する情報を格納します。

次に、1分ごとにメインのcrontabが起動するときに、どのユーザーがlast_crontab_at + frequency < Time.currentであるかを確認し、これらのユーザーのスクリプトを実行します。

このようにして、アプリケーションはユーザー数に関係なく拡張されます。

また、crontabはサーバーにとってローカルであることに注意してください。サーバーを変更したり、クラスタを作成する必要がある場合はどうなりますか?バックグラウンド処理サービスやキューを使うことを考えてみることをお勧めします。

+0

私は自分自身の提案の真っ只中にいました。ところで、あなたはおそらく 'last_crontab_at + frequency.minutes Laas

+0

あなたは正しいです。一定。 –

+0

頻度はおそらく数分であるため、前のコメントを編集してそれを反映させました。 – Laas

関連する問題