「イベント」(会議、誕生日パーティーなど)レコードのデータベースがあり、各イベントにはendTime
フィールドがあります。イベントが終了したら、過去のイベントごとに 2 ~ 3 通のメールを送信したいと考えています。
現在、1 時間ごとに cron ジョブを実行して、過去 1 時間以内に終了したすべてのイベントを検索すると、次のようになります。
- 午後 2 時 1 分: 午後 1 時から午後 2 時までの間に終了するすべてのイベントを検索し、メールを送信します。
- 午後 3 時 1 分: 午後 2 時から午後 3 時までの間に終了するすべてのイベントを検索し、メールを送信します。
- 午後 4 時 1 分: 午後 3 時から午後 4 時までの間に終了するすべてのイベントを検索し、メールを送信します。
- 午後 5 時 1 分: ...
ただし、午後 3 時 1 分のジョブが何らかの理由で失敗した場合 (Heroku が残りの API をクラッシュさせた、メール サービス プロバイダーがダウンしたなど)、午後 2 時から 3 時の間に終了したイベントはメールを受信しません。
現時点ではnotified
、メールが正常に送信されたかのようにデータベース レコードがマークされていません。cronスクリプトを変更して、「現在時刻より前のすべてのレコードを検索するnotified=false
」(以前に送信されていないすべてのレコードをキャッチする)ようにする必要がありますか?次に、正常に送信する電子メールの種類ごとにフラグを設定しますか?
または、フラグの設定を回避するより賢い方法はありますか?
(この質問のタイトルとタグを考えるのは地獄でした — 提案/編集を歓迎します!)