[Rails] Erstellen Sie eine Sitemap mit sitemap_generator und stellen Sie sie in GAE bereit

Was ist eine Sitemap?

Erforderliche Dateien bei der Registrierung einer Website bei Suchmaschinen wie Google und Yahoo. Diejenige, die in der Suchkonsole (Registrierungsdienst für die Google-Suche) abgefragt wird. Der Inhalt enthält hauptsächlich Informationen zu der Seite, die Sie bei der Suche anzeigen möchten.

Sitemap_generator hinzugefügt

Zu Gemfile hinzugefügt. * Github ist hier

Gemfile


gem 'sitemap_generator'

Installiere gem

$ bundle install

Erstellen Sie sitemap.rb

Führen Sie den folgenden Befehl aus, um config / sitemap.rb zu generieren.

$ rails sitemap:install

Bearbeiten Sie die generierte config / sitemap.rb. SitemapGenerator :: Sitemap.default_host enthält den Produktionshost. Beschreiben Sie in "SitemapGenerator :: Sitemap.create" die Seite, die Sie für die Suche registrieren möchten.

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

Versuchen Sie es lokal auszuführen.

$ rails sitemap:refresh

Sitemap-Updates und Benachrichtigungen werden in Suchmaschinen ausgeführt. Wenn Sie die Suchmaschine nicht benachrichtigen möchten, fügen Sie "no_ping" hinzu.

$ rails sitemap:refresh:no_ping

Wenn Sie es ausführen, können Sie sehen, dass "public / sitemap.xml.gz" generiert wird. Es kann von http: // localhost: 3000 / sitemap.xml.gz heruntergeladen werden.

Cron-Jobeinstellungen [GCP]

Da sitemap.xml.gz jedes Mal aktualisiert werden muss, wenn ein Benutzer erstellt wird, wird es regelmäßig jeden Tag mit cron job ausgeführt. Dafür wurde ein Endpunkt hinzugefügt.

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

Einstellungen zu cron.yaml hinzugefügt.

cron.yaml


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

Stellen Sie die Einstellungen für "Cron-Jobs" bereit.

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

Dies vervollständigt die Einstellungen für die periodische Ausführung durch "Cron-Jobs".

[GCP] Setzen Sie sitemap.xml.gz, um zu GCS zu gelangen

GAE in der Produktionsumgebung verarbeitet 3 Instanzen für das Scale-out. Wenn eine Datei dynamisch generiert und in einer Instanz platziert wird, wird die Datei daher nur mit einer Chance von 1/3 getroffen.

Erstens ist es ein Anti-Pattern, die generierte Datei in der Instanz unter der PaaS-Umgebung abzulegen. Es ist gut, auf externen Speicher (GCS) hochzuladen. Es gibt kein Problem, wenn Sie "Computed Engine" usw. verwenden.

Fügen Sie die GCS-Einstellungen zu config / sitemap.rb hinzu, wie in der Dokumentation sitemap_generator beschrieben.

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

Es wurde ein Routing hinzugefügt, um auf GCS zu "sitemap.xml" umzuleiten, wenn der Zugriff auf "https: // domain / sitemap.xml.gz" erfolgt.

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

Wenn Sie die GAE-Instanz erneut bereitstellen, ist die Einstellung damit abgeschlossen. Nachdem Sie "cron job" ausgeführt haben, können Sie "sitemap.xml.gz" herunterladen, indem Sie auf "https: // domain / sitemap.xml.gz" zugreifen.

Referenz

Recommended Posts

[Rails] Erstellen Sie eine Sitemap mit sitemap_generator und stellen Sie sie in GAE bereit
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Festlegen und Beschreiben von Umgebungsvariablen mit Rails zsh
So stellen Sie jQuery in Rails-Apps mit Webpacker bereit
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
So stellen Sie Bootstrap auf Rails bereit
[Rails] So laden Sie Bilder mit Carrierwave und Fog-Aws in AWS S3 hoch
[Rails] So laden Sie Bilder mit refile und refile-s3 in AWS S3 hoch
Stellen Sie Rails on Docker für Heroku bereit
Wie kann ich mit NUXTJS Official S3 und CloudFront für AWS bereitstellen? Mit Docker-Compose
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
[Docker] So erstellen Sie eine virtuelle Umgebung für Rails- und Nuxt.js-Apps
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
Installieren Sie Webpacker und Yarn, um Rails auszuführen
[Rails] So laden Sie Bilder mit Carrierwave hoch
Mit Docker auf Heroku bereitstellen (Rails 6, MySQL)
Java-Implementierung zum Erstellen und Lösen von Labyrinthen
Bereitstellen für Heroku [Ruby on Rails] Anfänger
Versuchen Sie, die Rails-App für EC2-Teil 2 (Bereitstellung) bereitzustellen.
[Rails] So erstellen Sie eine Teilvorlage
So implementieren Sie die Image-Veröffentlichung mithilfe von Schienen
Erstellen Sie eine API mit Retrofit2, Okhttp3 und Gson (Java).
Bereitstellung auf Ruby on Rails Elastic Beanstalk (EB-Bereitstellung)
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
So geben Sie Excel und PDF mit Excella aus
[Rails / Active Record] Über den Unterschied zwischen create und create!
Ausführen einer Methode und Verspotten mit JUnit
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Wie man Stimme oder Musik mit Javascript spielt
[Nuxt / Rails] POST-Implementierung mit axios und devise_token_auth
In Heroku bereitstellen (zur Bearbeitung nach dem zweiten Mal)
Stellen Sie Rails mit AWS Copilot für ECS Fargate bereit
[Rails] So laden Sie mehrere Bilder mit Carrierwave hoch
So erstellen Sie einfach ein Pulldown mit Rails
Rails6.0 ~ So erstellen Sie eine umweltfreundliche Entwicklungsumgebung
So erstellen Sie eine API mit GraphQL und Rails
So erstellen Sie hierarchische Kategoriedaten mithilfe von Vorfahren
[Rails] So geben Sie Erfolgs- und Fehlermeldungen aus
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
Erstellen Sie in Rails 6 einen Drag-and-Drop-Markdown-Editor (mit Active Storage, SimpleMDE und Inline-Anhang).
Implementieren Sie ein Reservierungssystem mit Rails und einfachem Kalender! Fügen wir datetime eine Validierung hinzu!
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
So implementieren Sie ein kreisförmiges Profilbild mit CarrierWave und R Magick in Rails
Erstellen Sie ein Java-Servlet und eine JSP-WAR-Datei für die Bereitstellung auf Apache Tomcat 9 mit Gradle