首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何基于时间动态调用方法

如何基于时间动态调用方法
EN

Stack Overflow用户
提问于 2017-04-13 19:13:35
回答 3查看 281关注 0票数 1

我正在创建一个自动抽签系统。我有一个抽签按钮,将运行一个抽签功能,以选择一个或多个优胜者,它发送电子邮件给管理员。

我希望这是一个完全自动化的系统,所以管理员只需创建抽签,他们就会收到一封电子邮件,谁赢后,抽签日期已经过去。我的抽奖有一个与他们相关的抽签日期,一旦它过去,我需要调用这个函数。

我如何告诉应用程序检查时间/日期,以确定抽奖时间是否已经过去?我到处找遍了,似乎找不到办法去做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-04-13 19:21:16

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

代码语言:javascript
复制
namespace :raffle do

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

end

deliver_later是由您使用的队列驱动程序(Delayed作业/救援/回放等)在队列中执行的后台执行。

票数 1
EN

Stack Overflow用户

发布于 2017-04-13 19:19:41

您可以使用无论何时宝石来定义一个作业,该作业每小时运行(或者无论您想要什么时间),检查抽签日期,并为任何经过的作业运行抽签。

票数 2
EN

Stack Overflow用户

发布于 2017-04-13 19:19:47

每当我需要安排时间时,我都会在rails应用程序中使用发条。只需将其设置为在需要时运行作业,并在该作业中执行逻辑,以查看需要处理哪些抽奖。示例:

时钟配置

代码语言:javascript
复制
every(1.day, 'Raffle::CheckJob', at: '01:00')

作业

代码语言:javascript
复制
Raffle.not_complete.find_each(batch_size: 10) do |raffle|
  if raffle.has_ended?
    // logic
  end
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43400036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档