- Create SitemapsController to serve sitemaps - Configure AWS S3 storage for sitemaps - Update routes to include sitemap paths - Add SitemapsHelper module - Configure SitemapGenerator with AWS adapter - Update storage configurations for AWS This feature adds sitemap functionality to the application, enabling search engines to discover and index its content more efficiently. It includes configuration for AWS S3 storage to host the sitemaps and updates the application's routes to serve them.
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
|