59 lines
2.6 KiB
Ruby
59 lines
2.6 KiB
Ruby
|
class RefreshSitemapWorker
|
||
|
include Sidekiq::Worker
|
||
|
|
||
|
def perform
|
||
|
host = Rails.env.production? ? "https://todayaiweather.com" : "http://127.0.0.1:3000"
|
||
|
Rails.application.routes.default_url_options[:host] = host
|
||
|
SitemapGenerator::Sitemap.default_host = host
|
||
|
if Rails.env.production?
|
||
|
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
|
||
|
ENV.fetch("AWS_BUCKET", Rails.application.credentials.dig(:aws, :bucket)),
|
||
|
aws_access_key_id: ENV.fetch("AWS_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :access_key_id)),
|
||
|
aws_secret_access_key: ENV.fetch("AWS_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws, :secret_access_key)),
|
||
|
aws_region: ENV.fetch("AWS_REGION", "wnam"),
|
||
|
endpoint: ENV.fetch("AWS_ENDPOINT", Rails.application.credentials.dig(:aws, :endpoint)),
|
||
|
)
|
||
|
else
|
||
|
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
|
||
|
ENV.fetch("AWS_DEV_BUCKET", Rails.application.credentials.dig(:aws_dev, :bucket)),
|
||
|
aws_access_key_id: ENV.fetch("AWS_DEV_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :access_key_id)),
|
||
|
aws_secret_access_key: ENV.fetch("AWS_DEV_SECRET_ACCESS_KEY_ID", Rails.application.credentials.dig(:aws_dev, :secret_access_key)),
|
||
|
aws_region: ENV.fetch("AWS_DEV_REGION", "wnam"),
|
||
|
endpoint: ENV.fetch("AWS_DEV_ENDPOINT", Rails.application.credentials.dig(:aws_dev, :endpoint)),
|
||
|
)
|
||
|
end
|
||
|
SitemapGenerator::Sitemap.sitemaps_path = "sitemaps/"
|
||
|
|
||
|
SitemapGenerator::Sitemap.create do
|
||
|
add root_path, changefreq: "daily", priority: 1.0
|
||
|
add cities_path, changefreq: "daily", priority: 0.9
|
||
|
add arts_path, changefreq: "daily", priority: 0.9
|
||
|
|
||
|
City.find_each do |city|
|
||
|
add city_path(city),
|
||
|
changefreq: "daily",
|
||
|
priority: 0.8,
|
||
|
lastmod: city.updated_at
|
||
|
end
|
||
|
|
||
|
WeatherArt.includes(:city).find_each do |art|
|
||
|
if art.image.attached?
|
||
|
add city_weather_art_path(art.city, art),
|
||
|
changefreq: "daily",
|
||
|
priority: 0.7,
|
||
|
lastmod: art.updated_at,
|
||
|
images: [ {
|
||
|
loc: url_for(art.image),
|
||
|
title: "#{art.city.name} Weather Art - #{art.weather_date.strftime('%B %d, %Y')}"
|
||
|
} ]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
# SitemapGenerator::Sitemap.ping_search_engines if Rails.env.production?
|
||
|
Rails.logger.info "Sitemap has been generated and uploaded to S3 successfully"
|
||
|
rescue => e
|
||
|
Rails.logger.error "Error refreshing sitemap: #{e.message}"
|
||
|
end
|
||
|
end
|