如何在Rails中创建一个任务以便将来运行一次?

时间:2017-09-28 14:31:24

标签: ruby-on-rails sidekiq rails-activejob

我有一个基于订阅的网站,允许未注册的用户下载文件,如果他们给我他们的电子邮件。我想要以下工作流程。

  1. 用户提供电子邮件地址

  2. Rails将来会创建一个任务7天

  3. 用户下载电子邮件文件

  4. 如果用户未在7天内注册,请向用户发送电子邮件

  5. 我需要添加#2和#4。现在我正在使用ActiveJob和Sidekiq创建作业以发送下载电子邮件。有没有办法让我可以创建一个ActiveJob来运行?未来的工作是否可以访问我的rails环境以检查我的数据库?

2 个答案:

答案 0 :(得分:1)

当然,您可以在一周内将ActiveJob排队。在作业的实施中,如果用户尚未注册,则有条件地发送电子邮件。请参阅ActiveJob上的Rails指南:http://guides.rubyonrails.org/active_job_basics.html#enqueue-the-job

示例:

# Enqueue a job to be performed 1 week from now.
UserConfirmationJob.set(wait: 1.week).perform_later(user)

答案 1 :(得分:0)

你能这样做吗?

  1. 用户发送电子邮件。
  2. 你允许他下载。
  3. 每天都会运行一个脚本来检查7天前发送电子邮件的用户是否已注册。
  4. 如果他还没有注册,你就会给他发电子邮件。