【问题标题】:How to continue running Rails app from where I left last time?如何从我上次离开的地方继续运行 Rails 应用程序?
【发布时间】:2016-08-15 10:09:28
【问题描述】:

我一直在 Ruby on Rails 上开发一个爬虫,它使用 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 " ]}

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

谢谢。

【问题讨论】:

  • 如果您将数据保存在数据库中,重新连接到数据库并重新获取应该不会占用大量资源。这取决于你在做什么。你还没有真正解释你的代码足以确定。
  • 我正在抓取一个包含有关汽车零件信息的 JS 密集型网站。我的代码遍历所有汽车并提取它们的汽车零件列表并将它们保存为对象实例。那么,提货情况如何?
  • 在您执行单个操作(例如写入记录)后,您的数据库将处于有限步中。如何使应用程序状态匹配数据库状态是一个个性化的问题。重新连接时,您到底有什么难以“接受”的问题?
  • 我希望能够停下来,关掉电脑,下次继续打码。

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


【解决方案1】:

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

我认为延迟工作对你很有用

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多