【Rails】Heroku + S3でsitemapを利用する方法
2017/12/10
こんにちは、okutani(@okutani_t)です。本記事では、Rails向けに「sitemap_generator gemを使って作成したsitemap.xmlをHerokuで利用する方法」について解説しています。
sitemap_generatorを使ったsitemap.xmlの作成については以下の過去記事をご確認ください。
Herokuではバッチで作成したファイルをサーバー上に置けないため、AWSのストレージサービスである「S3」に保存して利用する方法について解説しています。
S3の登録や利用方法については以下の記事内で触れているので参考にしてください。
また、今回は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を作成する方法は、以下の記事で解説しています。
合わせて参考にしてください。
Web開発のお仕事を募集しています
フリーランスのエンジニアとして、Webシステム開発のお仕事依頼を随時募集しています(現在の業務量によってお受けできない場合もあります)。
「Ruby on Rails」「JavaScript(jQuery, Reactなど)」「HTML + CSS」を用いたシステム開発、「Heroku」等を用いたサーバー構築・運用、「Git」や「GitHub」を利用したソーシャルコーディングなどに対応しています。
ご依頼を検討している方は、下記リンク本ブログからのお問い合わせ、もしくはokutaniのポートフォリオからご連絡ください。
LINKお問い合わせ
スポンサーリンク