1

ユーザープロファイルの日付フィールドに基づいてユーザーにリマインダーメールが送信されるリマインダーシステムを実装したいと考えています。これをどのように実装できますか? 多くの人がセロリを使わないように勧めました. cronタブを使用するように言われました。

これが私のやり方、これでいいのか?そうでない場合は、良い方法を教えてください。

cron: Python 管理コマンドを毎日実行する予定の場合、すべてのユーザーの日付をチェックして、その日のリマインダーがあるかどうかをチェックします。
ユーザーがリマインダーの日付を選択すると、その日付が何らかの方法で登録され、その日付にのみジョブが実行されると思いますが、これを実装する方法がわかりません。
これを実装する方法は次
のとおりです。「reminderdates」という名前のデータベーステーブルを作成し、リマインダーが登録されるたびに、その日付とuser_idをそのテーブルに追加します。そのため、その日がテーブルの日付に含まれているかどうかを確認する cron ジョブを毎日実行します。はいの場合、ジョブが実行されます。また、古いリマインダー日付をテーブルからすべて削除する別の cron ジョブを実行して、時間の経過とともにテーブルのサイズが大きくならないようにします。

4

1 に答える 1

0

最も簡単な解決策は、cron ジョブをセットアップして、タスクを実行するサイトの URL にアクセスすることです。私はセロリをお勧めします。理由は次のとおりです(Django/Celery Quickstartから):

Cron には単純さという利点がありますが、この仕事には理想的ではありません。サイトの通常のユーザーがこれらの URL に直接アクセスできないようにするための措置を講じる必要があります。また、外部構成を管理する必要があります。qa サーバーまたは実稼働サーバーで構成を実行するのを忘れた場合はどうなりますか? 構成がサイトのコードに含まれていると、より安全で簡単になります。

前のリンクで、セロリを使用してタスクを実装する方法に関するチュートリアルを見つけることができます。

reminderdatesテーブルのアイデアに関しては、うまくいくはずです。これを試してみると、少し単純化できます。

  1. 送信済みステータスの列を追加します。タスクは日付と送信済みステータスをチェックします。現在の日がリマインダーの日付と一致し、ステータスが「未送信」の場合、リマインダーを送信します。

  2. 古いリマインダーを削除するために、セカンダリ cron ジョブは必要ありません。リマインダーを送信する同じタスクは、リマインダーをそれぞれ送信し、後で削除できます (この場合、送信済み/未送信のステータスは必要ありません)。

于 2013-03-29T04:56:05.907 に答える