【问题标题】:Run a method after 5 minutes of creation of record in model rails在模型轨道中创建记录 5 分钟后运行方法
【发布时间】:2016-12-02 22:13:18
【问题描述】:

我是 Rails 新手,

如果我向任何用户发送请求,并且如果在 5 分钟内没有任何响应,则请求发送给另一个用户。

如何在 rails 中做到这一点,请建议我。

【问题讨论】:

  • 对不起,上面的描述不清楚。请详细说明。您是想向用户发送好友请求之类的东西,然后等待 5 分钟让他们回复还是其他什么?
  • 是的,类似的东西.. 实际上我想发送一个请求并等待 5 分钟,如果该用户不接受该请求,那么第二个用户将收到一个请求并再次等待 5 分钟
  • 您可能需要在初始“请求”创建 5 分钟后启动后台进程,您可以使用 sidekiq:github.com/mperham/sidekiq/wiki/Scheduled-Jobs
  • 没错,我也建议使用像sidekiq这样的后台处理器,并在调用该方法时使用“perform_at”安排任务,一旦您得到用户的响应,您就可以找到带有id的工作并取消计划的作业,否则作业将在 5 分钟后执行,您可以在向其他用户发送请求时跳过前一个用户,通过向请求的用户提供状态。

标签: ruby ruby-on-rails-4 delayed-job


【解决方案1】:

您可以使用延迟作业提供的run_at选项。

class RecordModel < ActiveRecord::Base
   after_create :make_delayed_entry

   def make_delayed_entry
      Delayed::Job.enqueue(SendMailAndWaitJob.new(parameters), 0, 5.minutes.from_now, :queue => "queue_name")
   end
end

SendMailAndWaitJob 它是类文件(lib 文件),您可以在其中检查请求是否被接受。

【讨论】:

  • 我是否需要为此运行任何其他服务器,例如 redis、sidekiq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
相关资源
最近更新 更多