如何从我上次离开的地方继续运行Rails应用程序?

时间:2016-08-15 10:09:28

标签: javascript ruby-on-rails ruby mongodb capybara

我一直在使用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 " ]}

我希望应用程序查看最新的数据库条目,并继续在最后一个数据库之后添加新元素,而不是从开始启动刮刀。

谢谢。

1 个答案:

答案 0 :(得分:0)

我提出了以下解决方案:将一个布尔属性:visited, default=false添加到我已经循环的模型中。在每次迭代结束时,我设置了:visited = true。 我的循环不是Class.all each do |x|而是Class.where(visited=false).map do |x|; 因此它会从上次停止的地方继续。