Ruby on rails Rails:如何恢复rake任务?
我认为Ruby on rails Rails:如何恢复rake任务?,ruby-on-rails,Ruby On Rails,我认为rake task不是这里的关键词,但是我不知道这个问题的correct关键词 articles = Article.all articles.each do |article| get_share(article) #use HTTParty, Nokogiri, etc. if article.save puts "#{article.url}, #{article.share}" end end 我用这个脚本从Facebook、Tw
rake task
不是这里的关键词,但是我不知道这个问题的correct
关键词
articles = Article.all
articles.each do |article|
get_share(article) #use HTTParty, Nokogiri, etc.
if article.save
puts "#{article.url}, #{article.share}"
end
end
我用这个脚本从Facebook
、Twitter
和其他平台获取url的共享号。然而,有时循环会被中断,可能是我的互联网连接中断,或者是nokogiri中的解析出错,或者只是艺术作品太多了
因此,如果我再次运行任务
,它将从头开始,这真是浪费时间
是否可以让它拾取循环停止的位置(在本例中是特定的文章
),然后从那里启动脚本
我可以输出article.id
,获得类似articles=article.where(id>stoped\u id)
的文章,但这是一个好的解决方案吗?或者是否有任何优雅的方法 我认为最好使用某种工具来实现这些任务。我个人喜欢
如果你不想做这样的事情,你总是可以解救异常并围绕它进行逻辑处理——或者像你提到的那样保存id,或者执行某种类型的睡眠重试逻辑。为了做到这一点,你必须以某种方式存储你更新过的文章。您可以查看articles表的updated_at字段,但这将包括通过站点正常操作更新的文章
一个超级简单的方法就是读/写一个临时文件。乙二醇
tempfile = "/tmp/updated_article_ids.txt"
if File.exists?(tempfile)
@updated_ids = File.readlines(tempfile).collect{|l| l.chomp.to_i}
end
if @updated_ids.blank?
articles = Article.all
else
articles = Article.where(["id not in (?)", @updated_ids]).all
end
articles.each do |article|
get_share(article) #use HTTParty, Nokogiri, etc.
if article.save
puts "#{article.url}, #{article.share}"
File.open(tempfile, "a"){|f| puts article.id}
end
end
如果知道要从头开始,请删除临时文件。或者,您可以在代码中进行进一步测试,仅在tempfile不到一天或其他时间使用它。附加问题:如果出现错误,如错误的url或其他内容,我如何将文章
跳转到下一个?当timeout
occrus时,恢复任务是唯一的方法吗?或者我可以再次重新发出http请求
?将其包装在begin rescue块中