我一直在使用Ruby on Rails上的刮刀,它使用Capybara / Poltergeist将数据保存到MongoDB数据库中的模型属性中。然而,数据集是巨大的,将需要很长时间,有时我可能会分心,如互联网连接,必须从头开始。你可以帮我找一个方法让app继续从我上次离开的地方插入数据库。
我的代码的简化摘录是:
naming.each_with_index do |namee, j|
@component=Compo.new
@component[:component]=gnamees[j]
@component[:partname]=Array.new
@session.execute_script("javascript:onSelectPart(#{namee[24..37]});")
sleep 2
@session.within_frame('content_consist') do
sleep 3
@session.within("form[name=ConsistList]") do
@session.all('input').each do |z|
@component[:partname] << z.value
end
end
end
@component.save
@session.driver.clear_memory_cache
end
每个这样的@komponent都保存在MongoDB中:
{ "_id" : ObjectId("57ad5b7f678208560bcb21bd"), "component" : "2U-9747 - WARNING GP-WIDE VEHICLE", "partname" : [ "PLATE-MARKER WIDTH ", "BOLT ", "NYLOC NUT ", "WASHER ", "PLATE MARKER FRONT ", "PLATE MARKER FRONT ", "SCREW DRIVE PAN " ]}
我希望应用程序查看最新的数据库条目,并继续在最后一个数据库之后添加新元素,而不是从开始启动刮刀。
谢谢。
答案 0 :(得分:0)
我提出了以下解决方案:将一个布尔属性:visited, default=false
添加到我已经循环的模型中。在每次迭代结束时,我设置了:visited = true。
我的循环不是Class.all each do |x|
而是Class.where(visited=false).map do |x|
;
因此它会从上次停止的地方继续。