modo consigliato o plugin per creare sitemap google per l'app ruby ??on rails?

StackOverflow https://stackoverflow.com/questions/810478

  •  03-07-2019
  •  | 
  •  

Domanda

Ho fatto una rapida ricerca su Google e non ho visto nulla di eccezionale per automatizzare la creazione e l'aggiornamento della mia sitemap google per l'app ruby ??on rails. Qualche suggerimento?

È stato utile?

Soluzione

Ho aggiunto una sitemap dinamica a un'applicazione blog solo di recente. Questi passaggi dovrebbero iniziare.

Aggiungi questo percorso verso la parte inferiore del file config / route.rb (i percorsi più specifici devono essere elencati sopra di esso):

map.sitemap '/sitemap.xml', :controller => 'sitemap'

Crea il SitemapController (app / controller / sitemap_controller):

class SitemapController < ApplicationController
  layout nil

  def index
    headers['Content-Type'] = 'application/xml'
    last_post = Post.last
    if stale?(:etag => last_post, :last_modified => last_post.updated_at.utc)
      respond_to do |format|
        format.xml { @posts = Post.sitemap } # sitemap is a named scope
      end
    end
  end
end

& # 8212; Come puoi vedere, questo è per un blog, quindi sta usando un modello Post .

Questo è il modello di visualizzazione (app / views / sitemap / index.xml.builder):

base_url = "http://#{request.host_with_port}"
xml.instruct! :xml, :version=>'1.0'
xml.tag! 'urlset', 'xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9' do
  for post in @posts do
    xml.tag! 'url' do
      xml.tag! 'loc', "#{base_url}#{post.permalink}"
      xml.tag! 'lastmod', post.last_modified
      xml.tag! 'changefreq', 'monthly'
      xml.tag! 'priority', '0.5'
    end
  end
end

Questo è tutto! Puoi testarlo facendo apparire http: // localhost: 3000 / sitemap.xml (se usi Mongrel ) in un browser, o forse utilizzando cURL.

Si noti che il controller utilizza il metodo stale? per inviare una risposta HTTP 304 non modificata se non ci sono nuovi post, è vero che la Sitemap è stata richiesta l'ultima volta.

Altri suggerimenti

In realtà non consiglierei di usare il controller e semplicemente instradarlo ad esso come '/sitemap.xml', perché se le tue Sitemap aumenteranno sprecheranno risorse. Sarebbe meglio fare un rake task e rigenerare sitemap ogni notte o giù di lì, a seconda della frequenza con cui cambia il contenuto.

Se il tuo sito non ha quasi 50000 pagine e non prevedi di averne di più, puoi inserirti in un file Sitemap, quindi ti suggerisco di utilizzare " Google Sitemaps con Ruby on Rails, Capistrano e Cron " So che funziona decentemente perché lo sto usando con successo atm.

Nota: non suggerirei di utilizzare gli autori per copiare le sitemap ogni volta che viene eseguita l'attività di distribuzione, a mio avviso non è pulita. È meglio usare la directory condivisa e il link simbolico su di essa durante la distribuzione, quindi si avrà la certezza di avere solo una versione dei file e ora di sprecare spazio se rimangono copie extra. Ho questo nel mio deploy.rb:

desc "Symlink the upload directories"
task :before_symlink do
  run "rm -drf #{release_path}/public/sitemaps"
  run "ln -s #{shared_path}/sitemaps #{release_path}/public/sitemaps"
end

Inoltre puoi utilizzare " Mappa del sito grande " gemma, ma l'ho trovato proprio ora e non posso dirti quanto è bello. Sembra davvero facile configurare questo gioiello e utilizza anche i percorsi delle tue rotaie per la generazione di collegamenti, quindi avrai un problema in meno da risolvere rispetto alla prima soluzione.

Google Sitemap Generator è la versione ufficiale di Google. È facile da installare e configurare.

http://code.google.com/p/googlesitemapgenerator/

Ti consiglio di dare un'occhiata al sitemap_generator gem . Gestisce tutti questi problemi per te ... e davvero, chi vuole fare casino con la creazione di XML?

Ecco un esempio di sitemap per mostrare come usi i tuoi modelli Rails e aiutanti di percorso per generare i tuoi URL sitemap:

# config/sitemap.rb
SitemapGenerator::Sitemap.default_host = "http://www.example.com"
SitemapGenerator::Sitemap.create do
  add '/contact_us'
  Content.find_each do |content|
    add content_path(content), :lastmod => content.updated_at
  end
end

Quindi usi le attività Rake per aggiornare tutte le volte che vuoi. È davvero così semplice :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top