【问题标题】:delayed_job vs. crondelay_job 与 cron
【发布时间】:2011-12-04 04:22:56
【问题描述】:

我有一个系统,用户进入其中需要经历一个包含多个部分的申请流程 - 有时用户会保存他们的进度并稍后再回来。

如果用户在 48 小时内没有回来,我想给他们发送一封电子邮件 - 最好使用 crondelayed_jobwhenever 执行此操作吗?

我注意到,每当我在控制台中运行操作(例如 bundle installrake db:migrate)时,它也会运行 cron,这让我怀疑我们可能会遇到用户在同一天收到多个提醒的情况.

您对此有何建议?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 cron delayed-job whenever


    【解决方案1】:

    首先,Whenever 和 Cron 是同义词。一切为您提供了一种使用 Ruby 编写 cronjobs 的方法(这很棒,我喜欢Whenever)。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2013-09-08
      相关资源
      最近更新 更多