我的模型中有这两种方法。一种方法查找单个CatalogItem facebook,如count,另一个方法遍历所有活动的CatalogItems,并使用上述方法查找它们的类似计数。
需要一段时间来浏览所有活跃的facebook喜欢...它可能会循环播放300到1000个对象;所以我想把它转移到某种cron,或者你们建议的任何地方。
我在想我应该在CatalogItem中添加一个名为cached_fb_count的列,并在该任务运行时调整 self.facebook_likes 以写入该colimn。
这是正确的做法吗?如果它每2个小时运行一次会是什么样的?
def self.facebook_likes
self.active.each_with_index do |i, index|
_likes = i.facebook_like_count
i.update_attribute(:cached_likes, _likes)
# puts "#{index+1} Likes: #{_likes} ########### ID: #{i.id} "
end
end
def facebook_like_count
item_like_count = JSON.parse(open("https://api.facebook.com/method/fql.query?query=select%20like_count%20from%20link_stat%20where%20url='https://www.foobar.com/catalog_items/#{self.id}'&format=json").read).first.flatten[1]
item_like_count = item_like_count + 1 if item_like_count > 0
end
答案 0 :(得分:1)
Delayed_job是执行异步任务的完美工具。它在一个单独的进程中运行,基于关系数据库(Active Record),因此它将执行的上下文保存为一个简单的脚本调用。并且具有丰富的功能,包括任务的优先级和scheldue。但如果您的任务占据了大量队列,请考虑Resque gem。它使用Reddis作为任务的存储,并且在长队列中处理得更快。
答案 1 :(得分:0)
使用时很容易设置。以下是链接:https://github.com/javan/whenever