Rails で Sitemap の作成、定期的な更新を行う
はじめに
Rails で sitemap_generator
を使って sitemap(sitemap.xml.gz
)を作成する方法にについて整理した。
実運用で使うであろう whenever
と組み合わせたバッチ処理についても合わせて整理した。
TL;DR
- Gemfile に
sitemap_generator
,whenever
を追加してインストール [bundle exec] rails sitemap:install
でconfig/sitemap.rb
を作成sitemap.xml.gz
に出力したい内容を記述
[bundle exec] rails sitemap:refresh
でpublic/sitemap.xml.gz
の作成や更新[bundle exec] wheneverize
でconfig/schedule.rb
を作成- 定期的に処理したい内容(
rake 'sitemap:refresh'
)を記述
- 定期的に処理したい内容(
[bundle exec] whenever --update-crontab
で cron ジョブの設定
目次
環境・条件
1 | $ sw_vers |
詳細
kjvarga/sitemap_generator
sitemap.xml.gz
を簡単に作成できる gem。
インストール
Gemfile
に gem 'sitemap_generator'
を追加して bundle install
1 | +gem 'sitemap_generator' |
1 | $ bundle install |
セットアップ
以下コマンドで初期設定、config/sitemap.rb
が作成される。
1 | $ bundle exec rails sitemap:install |
config/sitemap.rb
に、sitemap として生成したい内容を記述する。
1 | # アプリケーションのドメイン |
参考サイトで add root_path
としている例を見るが、root_path
はデフォルトで追加されるので気にしなくて良い。
サイトマップ作成
以下コマンドで public/sitemap.xml.gz
を作成
1 | $ bundle exec rails sitemap:create |
いきなり sitemap:refresh
や sitemap:refresh:no_ping
としても問題はない。
1 | $ bundle exec rails sitemap:refresh |
javan/whenever
Rails 関連の cron ジョブを簡単に設定できる gem
インストール
Gemfile
に gem 'whenever'
を追加して bundle install
1 | +gem 'whenever' |
1 | $ bundle install |
セットアップ
bundle exec wheneverize
で config/schedule.rb
が生成される
1 | $ bundle exec wheneverize |
config/schedule.rb
に定期実行したい内容を記述。今回はサイトマップを更新したいので rake 'sitemap:refresh'
を追記。
1 | # 毎日 13:30 に処理を実行 |
ジョブ登録
bundle exec whenever --update-crontab
を実行すると cron ジョブとして登録できる
実行前
1 | $ crontab -l |
ジョブ登録
1 | $ bundle exec whenever --update-crontab |
実行後は、下記のように登録される
1 | $ crontab -l |
メモ
ジョブとして登録できるのは command
, rake
, runnber
, script
の4つっぽい。
1 | # https://github.com/javan/whenever#define-your-own-job-types |
Tips: direnv との併用
direnv を使って環境変数を設定している場合、別途シェルスクリプトを作成しておいて、それをジョブで実行するようにした方が良い。
1 |
|
※direnv による環境変数の設定はディレクトリに移動したときに有効となるが、cron ジョブなどだと環境変数が有効にならずにエラーになることがある
まとめ
- Gemfile に
sitemap_generator
,whenever
を追加してインストール [bundle exec] rails sitemap:install
でconfig/sitemap.rb
を作成sitemap.xml.gz
に出力したい内容を記述
[bundle exec] rails sitemap:refresh
でpublic/sitemap.xml.gz
の作成や更新[bundle exec] wheneverize
でconfig/schedule.rb
を作成- 定期的に処理したい内容(
rake 'sitemap:refresh'
)を記述
- 定期的に処理したい内容(
[bundle exec] whenever --update-crontab
で cron ジョブの設定
その他・メモ
Nginx を使っている場合は設定ファイルを更新し、再起動するとアクセスできるようになる(はず)
1 | +location ~ ^/sitemap.xml.gz { |
参考文献
- kjvarga/sitemap_generator: SitemapGenerator is a framework-agnostic XML Sitemap generator written in Ruby with automatic Rails integration. It supports Video, News, Image, Mobile, PageMap and Alternate Links sitemap extensions and includes Rake tasks for managing your sitemaps, as well as many other great features.
- javan/whenever: Cron jobs in Ruby
- Rails で gem sitemap_generator を使ってサイトマップを作る - Qiita
- Railsでsitemapを自動で生成して定期的にsitemapを自動更新するようにする - Qiita
- 【Rails】『sitemap-generator』gemでお手軽にsitemap.xmlを作成する方法 | vdeep
- rails5+nginxでrobots.txtやsitemap.xml.gzにアクセス出来ない時の対処法 | 趣味グラマのブログ
- 【Rails 4.2】find_each と find_in_batches の違いと使い分け&【Rails 5.0~】in_batches - Qiita
関連記事
- Rails で既存の DB を利用するアプリケーションの作成方法(DB 参照のみ)
- Rails で Devise と論理削除を両立する方法
- Rails で rambulance を使ってエラー種別ごとに動的にエラーページを切り替える
- Rails で high_voltage を使って静的ページを作成する
- Rails で favicon の設定
- Rails で OGP を content_for で設定する方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア