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

How to continue running Rails app from where I left last time?

我一直在 Rails 上的 Ruby 上开发一个爬虫,它使用 Capybara/Poltergeist 将数据保存到 MongoDB 数据库中的模型属性中。然而,数据集很大,会花费很多时间,有时我可能会分心,比如互联网连接,不得不从头开始。你能帮我找到一个方法让应用程序继续从我上次离开的地方插入元素到数据库吗?

我的代码的简化摘录是:

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 " ]}

我希望应用查看最新的数据库条目,并在最后一个条目之后继续添加新元素,而不是从头开始抓取。

谢谢。

https://github.com/mperham/sidekiq怎么样?

我觉得延迟工作对你很有用

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