我構建了一個網站爬蟲(稍後)使用這些鏈接來讀取信息。在Rails中使用帶有正在運行的動態計數器的sidekiq
當前的rake-task逐個遍歷所有可能的頁面,並檢查請求是否通過低谷(有效響應)或返回404/503錯誤(無效頁面)。如果它是有效的網頁url被保存到我的數據庫。 現在,您可以看到總共50,000頁的任務請求需要一些時間。
我已閱讀關於Sidekiq以及它如何可以異步執行這些任務,從而使這個更快。
我的問題:正如你可以看到我的任務在每個循環後建立計數器。我猜這不適用於Sidekiq,因爲它只會獨立執行這個獨立於腳本的腳本,對嗎?
那麼我將如何解決每個實例需要自己的計數器的問題呢?
希望我的問題有道理 - 非常感謝!
desc "Validate Pages"
task validate_url: :environment do
require 'rubygems'
require 'open-uri'
require 'nokogiri'
counter = 1
base_url = "http://example.net/file"
until counter > 50000 do
begin
url = "#{base_url}_#{counter}/"
open(url)
page = Page.new
page.url = url
page.save!
puts "Saved #{url} !"
counter += 1
rescue OpenURI::HTTPError => ex
logger ||= Logger.new("validations.log")
if ex.io.status[0] == "503"
logger.info "#{ex} @ #{counter}"
end
puts "#{ex} @ #{counter}"
counter += 1
rescue SocketError => ex
logger ||= Logger.new("validations.log")
logger.info "#{ex} @ #{counter}"
puts "#{ex} @ #{counter}"
counter += 1
end
end
end