SomeModel が 2 時間更新されていない場合、メール通知を行いたいです。それを実装する最良の方法は何ですか?
2 に答える
個人的には、@ x1a4が提案する解決策はやややり過ぎだと思います。2 時間という比較的大きな時間枠を考えると、定期的に (たとえば、10 ~ 15 分ごとに 1 回) ジョブを実行し、すべてのモデルで updated_at <= 2.hours.ago を検索して、メールを送信します。
そのジョブを 15 分ごとに実行するようにスケジュールするには、いくつかのオプションがあります。Resque を使用している場合は、resque-schedulerを使用できます。標準のシステム cron を使用することもできますが、ジョブが実行されるたびに Rails を開始するためのかなりのオーバーヘッドが発生します。また、内部で Redis を使用する分散スケジューラ gem (つまり、複数のマシンで実行できるが、1 台だけで実行されているように動作する cron) も作成しました。
モデルが保存されたら、バックグラウンド ジョブをキューに入れ、その時点から 2 時間実行して電子メールを送信します。新しいジョブがキューに入れられたら、まだキューにある未実行のジョブをすべて削除します。
resque-scheduler
Redis が稼働していると仮定すると、プロバイダーはこれを行うための非常に簡単な方法を提供します。