Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:如何恢复rake任务?_Ruby On Rails - Fatal编程技术网

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块中