如何根据时间动态调用方法

时间:2017-04-13 19:13:36

标签: ruby-on-rails ruby dynamic

我正在创建一个自动抽奖系统。我有一个绘制按钮,它将运行绘图功能来选择一个赢家或赢家,并向管理员发送一封电子邮件。

我希望这是一个完全自动化的系统,以便管理员只需创建抽奖活动,他们会收到一封电子邮件,其中包含谁在抽奖日期过后赢了。我的抽奖活动有一个与他们相关的抽奖日期,一旦通过,我需要调用该功能。

如何告知应用程序检查时间/日期以查看是否有任何抽奖时间已过?我到处寻找,似乎无法找到办法。

3 个答案:

答案 0 :(得分:2)

您可以使用whenever gem来定义每小时运行一次的工作(或者经常需要),检查抽奖日期,并为任何已经过的任务运行抽奖。

答案 1 :(得分:2)

每当我需要安排事情时,我会在我的rails应用中使用Clockwork。只需将其设置为在您需要时运行作业,并在该作业中执行逻辑以查看需要处理哪些抽奖。例如:

发条配置

every(1.day, 'Raffle::CheckJob', at: '01:00')

<强>作业

Raffle.not_complete.find_each(batch_size: 10) do |raffle|
  if raffle.has_ended?
    // logic
  end
end

答案 2 :(得分:1)

您应该编写一个rake任务并将其执行添加到服务器上的crontab。您可以使用whenever gem来简化每个部署的crontab脚本和自动更新(when-capistrano /never-mina)。您的佣金任务示例:

namespace :raffle do

  task :check do
    Raffle.get_winners.each do |w| 
      Mailer.send_win_mail(w).deliver_later  
    end
  end

end

deliver_later是您使用的队列驱动程序在队列中的后台执行(DelayedJob / Rescue / Backburner等)