繁体   English   中英

Rails 3:每30分钟执行一次方法/脚本的方法

[英]Rails 3: Approach to Executing a Method/Script every 30 minutes

我有一个数据库,在行updated_at时间30分钟后,我想删除数据库中的行。 我知道如何根据这个时间找到行,但我不知道在定时间隔内实际删除它的技术。

实现这一目标的好方法是什么? 是否有Rails-esque?

延迟工作是这类事情的常用工具。

您可以使用perform方法创建一个简单的类来删除该条目:

class DeleteTheThing
  attr_accessor :thing_id

  def initialize(the_thing)
    @thing_id = the_thing.id
  end

  def perform
    # Delete the thing if it should still be deleted
  end
end

然后,当您决定删除对象时,请排队延迟的任务:

Delayed::Job.enqueue(
  DeleteTheThing.new(the_thing),
  :run_at => 30.minutes.from_now.getutc
)

最好的选择是使用Resque ,这就像延迟工作,但更好,更简单。 是一个简单的教程开始。 您可以设置Cron设置间隔为30分钟。

为什么不使用memcached而不是db? 然后你可以做类似的事情

  def get_data(user)
    Rails.cache.fetch("cached_data-#{user.name}", :expires_in => 30.minutes) do
      ##  create some hash here
      {:name => user.name, :more_data => user.data}
    end
  end

数据将持续存在,直到散列未使用30分钟。


如果你喜欢Active记录,你可以每5分钟左右完成一次cron工作,但这不能很好地扩展

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM