ruby-on-rails - 延迟作业与 cron

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

我有一个系统,用户可以在其中完成包含多个部分的申请流程 - 有时用户会保存进度并稍后再回来。

如果用户在 48 小时内没有回来,我想向他们发送一封电子邮件 - 最好使用 crondelayed_job何时

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

您对此有何建议?

最佳答案

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

Delayed_job 不是这里的答案。你肯定想使用 cronjobs。在您的应用程序模型上创建一个方法,该方法将获取具有 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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abd8dfcadfded8ebd2c4ded9cfc4c6cac2c585c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>>", :subject => "You haven't finished your Application!"
end

使用when来创建这个cron:

every :day, :at => '8am' do
  runner 'Application.notify_stale_applicants'
end

关于ruby-on-rails - 延迟作业与 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707484/

相关文章:

ruby-on-rails - Paypal 按钮上的 Rails 图像

ruby-on-rails - 如何在 linux 中为 Rails 应用程序添加环境变量?

ruby - 如何单独使用activerecord?

ruby-on-rails - 如何在确认后使 Devise 重定向

php - 如何在 php 中按日期设置和启用新的 php 内容?

mysql - Rails 无法在没有互联网的情况下连接本地数据库

ruby-on-rails - HTML 解析 : How to find the image in the document, 哪个被大多数文本包围?

ruby-on-rails - 嵌套设置 Rails 应用程序,辅助方法未返回我需要的内容

python - 用于获取 RSS 的 Django cron

ruby-on-rails - 从 Rails 应用程序中监视数据库表的外部更改