Générer un sitemap au déploiement pour une application rubyonrails

Il peut être intéressant de générer des sitemaps dans le cas où toutes les pages ne sont pas linkée (comprendre qu'elles n'ont pas de lien).

Le gem sitemap generator permet de faire cela. Il faut créer un fichier sitemap.rb dans config. Ce fichier a connaissance de l'environnement de rails (vous avez accès aux models).

Voici l'allure du fichier sitemap.rb (c'est un exemple avec le model Page) :

require 'rubygems'
require 'sitemap_generator'
SitemapGenerator::Sitemap.default_host = 'https://www.example.com'
SitemapGenerator::Sitemap.filename     = 'mon_sitemap'
SitemapGenerator::Sitemap.create do
  Page.all.each{ |page|
    add "/#{page.id}",
      :changefreq => 'monthly',
      :priority   => 0.4,
      :lastmod    => page.updated_at
  }
  add "/une_autre_page_statique", :changefreq => 'daily',  :priority => 0.7, :lastmod => 1.days.ago
end

Dans votre deploy.rb vous pouvez mettre ceci dans un before "deploy:create_symlink" do ... end

#sitemap
run "cd #{release_path} && RAILS_ENV=production rake sitemap:clean"
run "cd #{release_path} && RAILS_ENV=production rake sitemap:create"
# Optionnel permet de décompresser le gz 
#run "cd #{release_path}/public && gzip -d *.xml.gz"

Il faut aussi mettre ceci dans le Gemfile :

gem 'sitemap_generator'

Voir : https://github.com/kjvarga/sitemap_generator