0

RoRにrakeタスクまたはrubyコードを異なる時間に2回実行する方法があるかどうかを知りたいです。たとえば、ユーザーが登録した場合、3日後にタスクを実行し、1週間後に同じタスクを実行しますが、それ以上は実行しません(「プロセスを停止」)。私はcrontabと、Resque、Stalker、Starlingなどの宝石を見ていましたが、この宝石が誰に役立つのかはっきりとはわかりません。私は、ユーザーごとにデーモンを実行し、タスクの実行をカウントすることを考えています。問題は、デーモンがリソースを「食べている」間ずっとアクティブになることです。できるだけ少ないリソースを使用する方法はありますか?後でHerokuで実行したいと思います。

4

3 に答える 3

1

私は通常、レコードの日付列(first_reminder_sent_at、user_responed_at、week_reminder_sent_atなど)を使用してこのタイプの問題を解決します。この場合、最初のアイテムの日付、ユーザーの応答、および1週間後のアイテムの日付。

レーキタスクを呼び出すためのcronタスクを作成します-3日以上、1週間未満、ユーザーが応答していない、日付が設定されていないすべてのユーザーを確認します。バックグラウンドジョブをキューに入れます。ジョブはメール(またはタスクが何であれ)を送信してから、レコードに日付フィールドを設定します。

rakeタスクを呼び出すためのcronタスク-1週間以上経過していて、ユーザーが応答しておらず、日付が設定されていないすべてのユーザーを調べます。リマインダーを送信し、バックグラウンドジョブで日付を設定します。

于 2013-01-23T17:41:58.480 に答える
0

いつでもcronを試して、自分の作業を実行するrakeタスクを作成します。データベースに、rakeタスクがいつどのようにアクションを実行するかを示すトリガーフィールドを作成します。

于 2013-01-23T17:13:56.970 に答える
0

Posixシステムにはat、後で実行するジョブをスケジュールするための非常に簡単な方法であるコマンドがあります。他の回答で概説されているように、アプリケーションベースのキューイングメカニズムを使用して後の作業をスケジュールすることに問題はありませんが。atはホスト固有であるため、クラスターを実行している場合、特にホストが一時的な場合は、おそらく不適切です。

于 2013-01-23T18:27:01.110 に答える