hamayuzinの日記

エンジニアとかデータサイエンティストとかやってます。あの時 あれやってたな的な備忘録にできれば。

【rails/heroku/sitemap】heroku環境下のrailsでsitemapを設定する

heroku環境下で動いているrailsは、sitemap_generator gemだけではうまく動かない (作成したファイルを置けないなんだよ。。。)

github.com

そこで、AWSのS3に置く方法を用いる

sitemapの作成

sitemap_generator gemをインストールして rake sitemap:installすると、sitemapの設定ファイルができるのでいい感じに編集する

今回は、音楽系のサイトで アーティスト一覧や、曲一覧がある場合を考える。

config/sitemap.rb

SitemapGenerator::Sitemap.default_host = "http://www.testes.com"
SitemapGenerator::Sitemap.sitemaps_host = 'http://s3-ap-northeast-1.amazonaws.com/bucket_name'
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new('bucket_name')

SitemapGenerator::Sitemap.create do
  add root_path
  # 曲一覧
  add songs_path
  # アーティスト一覧
  add artists_path

  # 各アーティストのパス show(id)
  Artist.all.find_each do |artist|
    add artist_path(artist), :lastmod => artist.updated_at
  end

  # 各曲のパス show(id)
  Song.all.find_each do |song|
    add song_path(song), :lastmod => song.updated_at
  end
end

これで、sitemap_generaterが勝手にアップしてくれる

s3の設定

S3に任意のバケットを作成しておく

gem 'aws-sdk'

だけインストールしておく。

ルーティング

config/routes.rb

get 'sitemap.xml', to: redirect('https://s3-ap-northeast-1.amazonaws.com/BUCKET_NAME/sitemaps/sitemap.xml.gz')

heroku設定

awsの各情報を登録しておく

heroku config:add AWS_ACCESS_KEY_ID=hogehoge
heroku config:add AWS_SECRET_ACCESS_KEY=hogehoge
heroku config:add AWS_REGION=ap-northeast-1

herokuにdeployした後に heroku run rake sitemap:refresh したら完了

まとめ

簡単に登録できる。