2

私は、ユーザーが複数の部分からなるアプリケーション プロセスを実行するシステムを持っています。ユーザーは進行状況を保存して後で戻ってくることがあります。

ユーザーが 48 時間以内に戻ってこない場合に電子メールを送信したい - 、、または を使用してこれを行うのが最善でしょcrondelayed_jobwhenever?

bundle installコンソールで操作 (または など)を実行するたびに cron も実行されることに気付きましたrake db:migrate。これにより、ユーザーが同じ日に複数のリマインダーを受け取るインスタンスがあるのではないかと疑っています。

これに対するあなたの推奨事項は何ですか?

4

1 に答える 1

5

まず、Whenever と Cron は同義語です。Always が行うことは、Ruby を使用して cronjobs を作成する方法を提供することだけです (これは素晴らしいことです。私はいつでも大好きです)。

Delayed_job はここでの答えではありません。あなたは間違いなくcronjobsを使いたいです。Application モデルにメソッドを作成して、updated_at値が のアプリケーションを取得し、そのアプリケーションに< 2.days.ago電子メールを送信します。

def notify_stale_applicants
  @stale_applications = Application.where('updated_at < ?', 2.days.ago) # or 48.hours.ago
  @stale_applications.each do |app|
    UserMailer.notify_is_stale(app).deliver
  end
end

そしてあなたの UserMailer:

def notify_is_stale(application)
  @application = application
  mail(:to => application.user.email, :from => "Application Status <status@yourdomain.com>", :subject => "You haven't finished your Application!"
end

when を使用してこの cron を作成します。

every :day, :at => '8am' do
  runner 'Application.notify_stale_applicants'
end
于 2011-10-10T00:25:00.377 に答える