如何安排函数在将来执行?

时间:2011-03-31 01:27:34

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个rails应用程序,用户在其中创建一个名为rooster的记录,其名为“on”的布尔值设置为true。在rails控制台中,它看起来像:

Rooster 
=> Rooster{:id integer, :user_id integer, :created_at datetime, :updated_at datetime, :on boolean} 

现在,经过一段时间(比方说,10个小时),我需要应用程序自动将该布尔值翻转为“false”(用户不做任何事情)。

非常简单的想法。那么,如何在rails 3中创建一个在经过一段时间后执行的方法?

3 个答案:

答案 0 :(得分:2)

您需要查看DelayedJobResque

答案 1 :(得分:1)

使用DelayedJob,您可以执行类似

的操作
  def in_the_future
   # Some other code
  end
  handle_asynchronously :in_the_future, :run_at => Proc.new { 10.hours.from_now }

非常好吗? :)我建议你阅读jared链接的文档

答案 2 :(得分:1)

查看SimpleWorker,这是一个基于云的后台处理/工作队列,用于Ruby应用程序。

旨在卸载前端任务(发送电子邮件,发布到Twitter),运行预定作业或扩展大量并行作业(网络爬行,ruby hadoop等)。非常适合这种用途。

作业在云中运行,因此您不仅可以从应用服务器卸载任务,还可以获得在顶级云基础架构上运行的可靠性(该服务使用持久性数据存储和消息队列在AWS上运行)。

(披露:我为公司工作。)