我制作了这个脚本,它可以工作。“product.slug”是因为我安装了friendly_id。它将生成名称为 www.mydomain.com/productabc-123/ 的 url 变量,Nokogiri 将读取这些变量(此解决方案需要 Nokogiri gem)。
请注意,我在此解决方案中从片段缓存切换到动作缓存(与我使用片段缓存的问题相反)。重要的区别是当我检查缓存时if Rails.cache.exist?('views/www.mydomain.com/' + product.slug)
。对于 fragment_caching,它应该是那里的片段名称。
require 'nokogiri'
require 'open-uri'
Product.all.each do |product|
url = 'http://www.mydomain.com/' + product.slug
begin
if Rails.cache.exist?('views/www.mydomain.com/' + product.slug)
puts url + " is already in cache"
else
doc = Nokogiri::HTML(open(url))
puts "Reads " + url
# Verifies if the caching worked. Only for trouble shooting
if Rails.cache.exist?('views/www.mydomain.com/' + product.slug)
puts "--->" + url + " is NOW in the cache"
else
puts "--->" + url + " is still not in the cache!"
end
sleep 1
end
rescue
puts 'Normal rescue of ' + url
rescue Timeout::Error
puts 'Timeout rescue of ' + url
puts 'Sleep for 5 sec'
sleep 5
retry
end
end