vdeep

*

vdeepはプログラミング、IT、Web技術、ライフハックの事などなどを管理人okutaniがつぶやくブログです。月間13万PV〜。

【Rails】Heroku + S3でsitemapを利用する方法

   

LINEで送る
Pocket


こんにちは、okutani(@okutani_t)です。本記事では、Rails向けに「sitemap_generator gemを使って作成したsitemap.xmlをHerokuで利用する方法」について解説しています。

sitemap_generatorを使ったsitemap.xmlの作成については以下の過去記事をご確認ください。

【Rails】『sitemap-generator』gemでお手軽にsitemap.xmlを作成する方法
こんにちは、okutani(@okutani_t)です。本記事では『sitemap-generator』と...
2017-10-26 02:18
はてブ

Herokuではバッチで作成したファイルをサーバー上に置けないため、AWSのストレージサービスである「S3」に保存して利用する方法について解説しています。

S3の登録や利用方法については以下の記事内で触れているので参考にしてください。

【Rails】S3へ『CarrierWave+fog』を使って画像アップロードする方法
こんにちは、okutani(@okutani_t)です。本記事ではAWS(Amazon Web Servi...
2017-03-04 15:57
はてブ

また、今回はS3へのアップロードに「aws-sdk」gemを利用します。そちらの導入についても合わせて解説しています。

それでは、さっそくRails + Herokuでsitemap.xmlを作成・利用する方法についてみていきましょう。

スポンサーリンク

sitemap_generator, aws-sdkの導入

まずは必要なgemを導入します。Gemfileに以下を記述。

gem 'sitemap_generator'
gem 'aws-sdk'

bundlerで導入。今回プロジェクト直下に配置しました。

$ bundle install --path vendor/bundle

これでgemの導入が完了しました。

設定ファイルの準備

sitemap用の設定ファイルを作成。

$ bundle exec rails sitemap:install

「config/sitemap.rb」を以下のように書き換えます。

SitemapGenerator::Sitemap.default_host = 'https://example.com'
SitemapGenerator::Sitemap.sitemaps_host = "https://s3-ap-northeast-1.amazonaws.com/#{ENV['S3_BUCKET_NAME']}"
SitemapGenerator::Sitemap.sitemaps_path = 'sitemaps/'
SitemapGenerator::Sitemap.adapter = SitemapGenerator::AwsSdkAdapter.new(
  ENV['S3_BUCKET_NAME'],
  aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  aws_region: ENV['AWS_REGION'],
)

SitemapGenerator::Sitemap.create do
  add for_customer_articles_path, priority: 0.7, changefreq: 'daily'

  Article.where(status: 1).find_each do |article|
    add for_customer_article_path(article), priority: 0.7, lastmod: article.updated_at, changefreq: 'daily'
  end
end

「example.com」やsitemap生成処理の中身は各プロジェクトに合わせて変更してください。

ENV変数の設定方法は次の項目で解説しています。

これでsitemap.rbの準備が整いました。

S3用のconfig設定

S3用にconfigを設定します。「$ heroku config:set」を使ってそれぞれ登録していきます。

$ heroku config:set AWS_ACCESS_KEY_ID=hoge
$ heroku config:set AWS_SECRET_ACCESS_KEY=huga
$ heroku config:set AWS_REGION=ap-northeast-1
$ heroku config:set S3_BUCKET_NAME=bucket_example

「ap-northeast-1」は東京リージョンです。アクセスIDやシークレットキー、バケット名はそれぞれの環境に合わせて設定してください。

これでS3へsitemapを送信する手順が整いました。

ルーティングの設定

「/sitemap」でsitemap.xml.gzにアクセスできるように、「config/routes.rb」に以下を追記します。

get 'sitemap', to: redirect('https://s3-ap-northeast-1.amazonaws.com/バケット名/sitemaps/sitemap.xml.gz')

これで「http://example.com/sitemap」へアクセスすれば、S3上のsitemap.xml.gzにリダイレクトされます。

sitemap作成を実行

プロジェクトをherokuにdeploy後、以下のコマンドを実行。

$ heroku run bundle exec rails sitemap:refresh

もしくは、GoogleとBingにpingを送りたくない場合は以下のコマンドを使います。

$ heroku run bundle exec rails sitemap:refresh:no_ping

これでS3にsitemap.xml.gzが送信されているはずです。

「/sitemap」へアクセスして、sitemap.xml.gzへリダイレクトされていれば完了です。

Herokuでsitemapを利用したい方の参考になれば幸いです。

関連

WordPressでsitemapを作成する方法は、以下の記事で解説しています。

All in One SEO PackのXML Sitemapで最低限行うべき設定項目
こんにちは、okutani(@okutani_t)です。WordPressでサイトを立ち上げる際に、SEO...
2015-03-04 02:37
はてブ
WordPressのサイトマップを「PS Auto Sitemap」で作成してみよう
こんにちは、okutani(@okutani_t)です。サイトマップとは、サイト内にあるページのリンク集のよう...
2015-12-27 21:30
はてブ

合わせて参考にしてください。

この記事が気に入ったら
いいね ! しよう

Twitter で
LINEで送る
Pocket

okutani (@okutani_t) のヒトコト
Herokuはいろいろな制約があってやっかいですね。ただ、今回S3へのファイルアップの練習にもなってよかったです。

 - Heroku, Ruby on Rails

スポンサーリンク

PC用AdSense

PC用AdSense

  こちらもどうぞ

vdeepのトップページへ戻る画像です。風船の形をした島を女の子が掴んでいます。