[英]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
)
为什么不使用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.