スポンサーリンク
概要
ruby on railsでheroku上に構築しているWEBサイトのサイトマップをGCS(Google Cloud Storage)に保存する方法のメモです。
スポンサーリンク
背景
herokuはいわゆるコンテナ型のサービスになるため、サーバー環境内でファイルの永続化はできないため、AWSのS3やGCPのGCSなどのクラウドストレージサービスに保存する必要があります。
S3を使った例はよく見かけますが、GCSの例があまり無いのので記載してみます。
スポンサーリンク
前提
GCSの設定などは省略します。
下記の情報をGCSから取得して下さい。
- プロジェクト名
- バケット名
- クレデンシャルファイル(json)
スポンサーリンク
方法
Gem
Gemfileに下記を記載します。
1 2 3 |
gem 'google-cloud-storage' gem 'sitemap_generator' gem 'dotenv-rails' |
記載後、bundle installでインストールを行います。
sitemap_generatorの設定
インストール後、下記のコマンドを実行します。
1 |
rails sitemap:install |
config/sitemap.rbファイルが作成されるので下記のように記載する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
require 'google/cloud/storage' SitemapGenerator::Sitemap.default_host = '自分のWEBサイトのURL' SitemapGenerator::Sitemap.adapter = SitemapGenerator::GoogleStorageAdapter.new( credentials: JSON.parse(ENV['GOOGLE_CREDENTIALS']), project_id: ENV['GCS_PROJECT_ID'], bucket: ENV['GCS_BUCKET'] ) SitemapGenerator::Sitemap.create do add about_path, priority: 0.5 // 以下にサイトマップに記載したいURLを記載する。 // ここの例では記事のIDとカテゴリのIDの列挙を行なっている。 Article.find_each do |article| add "articles/#{article.id}", lastmod: article.updated_at end Category.find_each do |category| add "articles/pages/1?category=#{category.id}", lastmod: category.updated_at end end |
ENV('xxx')の部分は後で後で環境変数として登録を行う。
credentialsの部分はjsonを文字列としてものを渡しても動かないので、常時のように渡すことで動いた。
スポンサーリンク
URLのリダイレクト
自サイトURLからGCSのサイトマップへ転送を行うために、routes.rbにサイトマップのルーティングを追加する。
1 |
get 'sitemaps/sitemap.xml.gz', to: redirect('https://storage.googleapis.com/' + ENV['GCS_BUCKET'] + '/sitemap.xml.gz', status: 301) |
環境変数の追加
herokuの環境変数を追加する。
1 2 3 |
heroku config:set GCS_PROJECT_ID="プロジェクトID" heroku config:set GCS_BUCKET="バケット名" heroku config:set GOOGLE_CREDENTIALS="クレデンシャルのJSON" |
サイトマップの作成
下記のコマンドでherokuにデプロイを行う。
1 |
git push heroku master |
デプロイ完了後に、下記のコマンドを実行する。
1 |
heroku run rails sitemap:refresh |
自サイトのURL/sitemaps/sitemap.xml.gz
にブラウザでアクセスしてみてサイトマップがDLできれば成功。