[Rails] Créez un plan de site à l'aide de sitemap_generator et déployez-le dans GAE

Qu'est-ce que le plan du site

Fichiers requis lors de l'enregistrement d'un site avec des moteurs de recherche tels que Google et Yahoo. Celui qui vous est demandé dans la Search Console (service d'inscription à la recherche Google). Le contenu contient principalement des informations sur la page que vous souhaitez afficher dans la recherche.

Ajout de sitemap_generator

Ajouté à Gemfile. * Github est ici

Gemfile


gem 'sitemap_generator'

Installez gem

$ bundle install

Créer sitemap.rb

Exécutez la commande suivante pour générer config / sitemap.rb.

$ rails sitemap:install

Modifiez le fichier config / sitemap.rb généré. SitemapGenerator :: Sitemap.default_host contient l'hôte de production. Dans SitemapGenerator :: Sitemap.create, décrivez la page que vous souhaitez enregistrer pour la recherche.

config/sitemap.rb


require 'rubygems'
require 'sitemap_generator'

SitemapGenerator::Sitemap.default_host = "http://www.example.com"
SitemapGenerator::Sitemap.create do
  add '/', changefreq: 'weekly', priority: 0.9
  add '/about', changefreq: 'weekly', priority: 0.5

  User.all.each do |user|
    add user_path(user), lastmod: spot.updated_at
  end
end

Essayez de l'exécuter localement.

$ rails sitemap:refresh

Les mises à jour et les notifications du plan du site sont envoyées aux moteurs de recherche. Si vous ne souhaitez pas avertir le moteur de recherche, ajoutez no_ping.

$ rails sitemap:refresh:no_ping

Lorsque vous l'exécutez, vous pouvez voir que public / sitemap.xml.gz est généré. Il peut être téléchargé depuis http: // localhost: 3000 / sitemap.xml.gz.

[GCP] Paramètres de tâche Cron

Puisque sitemap.xml.gz doit être mis à jour chaque fois qu'un utilisateur est créé, il est périodiquement exécuté tous les jours avec une tâche cron. Ajout d'un point de terminaison pour cela.

cron_jobs_controller.rb


class CronJobsController
  def refresh
    logger.info `bundle exec rails sitemap:refresh`
    head :ok

  rescure StandardError => e
    logger.error e.full_message
    head :internal_server_error
  end
end

routes.rb


Rails.application.routes.draw do
  ...

  resources :sitemaps, only: [:index]
end

Ajout de paramètres à cron.yaml.

cron.yaml


cron:
- description: sitemap
  url: /cron_jobs/sitemaps
  timezone: Asia/Tokyo
  schedule: every day 03:00

Déployez les paramètres pour les tâches cron.

$ gcloud app deploy cron.yaml --project=target-project

Ceci complète les paramètres pour l'exécution périodique par les tâches cron.

[GCP] Configurez sitemap.xml.gz pour passer à GCS

GAE dans l'environnement de production gère 3 instances pour la montée en charge. Par conséquent, si un fichier est généré dynamiquement et placé dans une instance, le fichier ne touchera que 1/3 de chance.

En premier lieu, c'est un anti-pattern pour mettre le fichier généré dans l'instance sous l'environnement PaaS. Il est bon de télécharger sur un stockage externe (GCS). Il n'y a aucun problème si vous utilisez Computed Engine, etc.

Ajoutez les paramètres GCS à config / sitemap.rb comme décrit dans la documentation sitemap_generator.

SitemapGenerator::GoogleStorageAdapter Uses Google::Cloud::Storage to upload to Google Cloud storage. You must require 'google/cloud/storage' in your sitemap config before using this adapter. An example of using this adapter in your sitemap configuration with options:

by https://github.com/kjvarga/sitemap_generator#upload-sitemaps-to-a-remote-host-using-adapters

config/sitemap.rb


require 'rubygems'
require 'sitemap_generator'
require 'google/cloud/storage'

SitemapGenerator::Sitemap.default_host = ENV['BASE_URL']
SitemapGenerator::Sitemap.sitemaps_host = "https://storage.googleapis.com/#{ENV['GOOGLE_BUCKET']}"
SitemapGenerator::Sitemap.adapter = SitemapGenerator::GoogleStorageAdapter.new(
  credentials: ENV['GOOGLE_CREDENTIAL'],
  project_id: ENV['GOOGLE_PROJECT_ID'],
  bucket: ENV['GOOGLE_BUCKET']
)
SitemapGenerator::Sitemap.create do
  add '/', changefreq: 'weekly', priority: 0.9
  add '/about', changefreq: 'weekly', priority: 0.5

  User.all.each do |user|
    add user_path(user), lastmod: spot.updated_at
  end
end

Ajout d'un routage pour rediriger vers sitemap.xml sur GCS lorsque l'accès arrive à https: // domaine / sitemap.xml.gz.

routes.rb


Rails.application.routes.draw do
  ...

  get '/sitemap.xml.gz', to: redirect("https://storage.googleapis.com/#{ENV['GOOGLE_BUCKET']}/sitemap.xml.gz", status: 301)
end

Avec cela, si vous déployez à nouveau l'instance GAE, le paramètre est terminé. Après avoir exécuté cron job, vous pouvez télécharger sitemap.xml.gz en accédant à https: // domaine / sitemap.xml.gz.

référence

Recommended Posts

[Rails] Créez un plan de site à l'aide de sitemap_generator et déployez-le dans GAE
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
(Ruby on Rails6) Comment créer un modèle et une table
Comment définir et décrire des variables d'environnement à l'aide de Rails zsh
Comment déployer jQuery dans les applications Rails à l'aide de Webpacker
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
Comment déployer Bootstrap sur Rails
[Rails] Comment télécharger des images sur AWS S3 à l'aide de Carrierwave et de fog-aws
[Rails] Comment télécharger des images sur AWS S3 à l'aide de refile et refile-s3
Déployer des rails sur Docker vers heroku
Comment déployer sur AWS à l'aide de NUXTJS S3 et CloudFront officiels? Avec docker-compose
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
[Docker] Comment créer un environnement virtuel pour les applications Rails et Nuxt.js
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Installez Webpacker et Yarn pour exécuter Rails
[Rails] Comment télécharger des images à l'aide de Carrierwave
Déployer sur heroku avec Docker (Rails 6, MySQL)
Implémentation Java pour créer et résoudre des labyrinthes
Déployer sur Heroku [Ruby on Rails] Débutant
Essayez de déployer l'application Rails sur EC2-Part 2 (déploiement) -
[rails] Comment créer un modèle partiel
Pour implémenter la publication d'images à l'aide de rails
Créer une API à l'aide de Retrofit2, Okhttp3 et Gson (Java)
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
Créer une fonction d'authentification dans l'application Rails à l'aide de devise
Comment sortir Excel et PDF avec Excella
[Rails / Active Record] À propos de la différence entre créer et créer!
Comment exécuter une méthode et simuler avec JUnit
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
Comment jouer de la voix ou de la musique en utilisant javascript
[Nuxt / Rails] Implémentation POSTed en utilisant axios et devise_token_auth
Déployer sur Heroku (pour édition après la deuxième fois)
Déployer des rails sur ECS Fargate avec AWS Copilot
[Rails] Comment télécharger plusieurs images à l'aide de Carrierwave
Comment créer facilement un pull-down avec des rails
Rails6.0 ~ Comment créer un environnement de développement respectueux de l'environnement
Comment créer une API avec GraphQL et Rails
Comment créer des données de catégorie hiérarchique à l'aide de l'ascendance
[Rails] Comment émettre des messages de réussite et d'erreur
[Rails] Différence entre la méthode de création et la méthode nouvelle + sauvegarde
Créez un éditeur de démarques par glisser-déposer dans Rails 6 (à l'aide d'Active Storage, SimpleMDE et Inline Attachment)
Implémentez un système de réservation utilisant des Rails et un calendrier simple! Ajoutons la validation à datetime!
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
Comment implémenter une image de profil circulaire avec CarrierWave et R Magick in Rails
Créer un servlet Java et un fichier WAR JSP à déployer sur Apache Tomcat 9 avec Gradle