sitemap_generatorを使ってサイトマップを生成していたのですがデプロイ時に生成していたため、管理画面から新しく作られたページがサイトマップに載っていなかったり削除されたページが載ったままだったりしたので、バッチ処理で定期的に生成するようにしました。
動的に生成するgemもあるようですが、動的だとページ数が多すぎて負荷がかなりかかるのでsitemap_generatorを使ってバッチ処理をするようにしてます。
fogを使った設定
Gemfileに gem 'fog'
を記入しておく必要があります。
fogを使用する場合は fogが対応しているprovider 全て使えるはずです。
SitemapGenerator::Sitemap.adapter =
SitemapGenerator::FogAdapter.new(
fog_directory: ENV['S3_BUCKET_NAME'],
fog_credentials: {
provider: 'AWS',
aws_access_key_id: ENV['AWS_ACCESS_KEY'],
aws_secret_access_key: ENV['AWS_SECRET_KEY'],
region: ENV['AWS_REGION']
}
)
aws-sdkを使った設定
Gemfileに gem 'aws-sdk'
を記入しておく必要があります。
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
's3_bucket_name',
aws_access_key_id: ENV['AWS_ACCESS_KEY'],
aws_secret_access_key: ENV['AWS_SECRET_KEY'],
aws_region: ENV['AWS_REGION']
)
wheneverでバッチ処理する
wheneverを使って定期的にサイトマップ作成を実行させます
# Gemfile
gem 'whenever', :require => false
これをGemfileに書いて下記コマンドを実行します
bundle install --path vendor/bundle
bundle exec wheneverize .
最後に定期的に実行する設定を書いて完了です
# config/schedule.rb
every :day, at: '2:00am', roles: :batch do
rake '-s sitemap:refresh'
end