Ich habe eine schnelle Google-Suche und nicht sehen, etwas super-groß zu automatisieren Erstellung und Aktualisierung meiner Google-Sitemap für die Ruby on Rails app. Irgendwelche Vorschläge?
Antworten
Zu viele Anzeigen?Ich würde wirklich nicht empfehlen, einen Controller zu verwenden und einfach auf ihn zu routen wie '/sitemap.xml', denn wenn Ihre Sitemaps wachsen, wird das Ressourcen verschwenden. Es wäre am besten, einen Rake-Task zu erstellen und die Sitemaps jede Nacht oder so neu zu generieren, je nachdem, wie häufig sich der Inhalt ändert.
Wenn Ihre Website nicht annähernd 50000 Seiten hat und Sie nicht vorhaben, mehr Seiten zu haben, als in eine einzige Sitemap-Datei passen, dann empfehle ich Ihnen, " Google Sitemaps mit Ruby on Rails, Capistrano und Cron " Ich weiß, dass es anständig funktioniert, weil ich es derzeit erfolgreich benutze.
Anmerkung: Ich würde nicht vorschlagen, dass die Autoren die Sitemaps jedes Mal kopieren, wenn die Verteilungsaufgabe ausgeführt wird, da dies meiner Meinung nach nicht sauber ist. Es ist besser, ein gemeinsames Verzeichnis zu verwenden und beim Deployment einen Symlink dorthin zu setzen, dann ist man sicher, dass man nur eine Version der Dateien hat und keinen Platz verschwendet, wenn zusätzliche Kopien zurückbleiben. Ich habe dies in meinem 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
Sie können auch " Große Sitemap "aber ich habe es erst jetzt gefunden und kann nicht sagen, wie gut es ist. Es sieht so aus, als ob es wirklich einfach ist, dieses Gem einzurichten und es verwendet auch Ihre Rails-Routen für die Link-Generierung, so dass Sie ein Problem weniger zu lösen haben als mit der ersten Lösung.
Ich habe erst kürzlich eine dynamische Sitemap zu einer Blog-Anwendung hinzugefügt. Diese Schritte sollten Ihnen den Einstieg erleichtern.
Fügen Sie diese Route am Ende Ihrer config/routes.rb
(spezifischere Routen sollten darüber aufgeführt sein):
map.sitemap '/sitemap.xml', :controller => 'sitemap'
Erstellen Sie die SitemapController
(app/controllers/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
-Wie Sie sehen können, ist dies für einen Blog, so ist die Verwendung eines Post
Modell.
Dies ist die Ansichtsvorlage (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
Das war's! Sie können es testen, indem Sie Folgendes aufrufen http://localhost:3000/sitemap.xml (bei Verwendung von Mongrel) in einem Browser oder vielleicht mit Hilfe von cURL.
Beachten Sie, dass der Controller die stale?
Methode, um eine HTTP 304 Not Modified-Antwort auszugeben, wenn seit der letzten Abfrage der Sitemap keine neuen Einträge vorhanden sind.
Ich würde empfehlen, dass Sie sich die sitemap_generator gem . Es übernimmt all diese Aufgaben für Sie... und wer will sich schon mit der Erstellung von XML herumschlagen?
Hier ist eine Beispiel-Sitemap, um zu zeigen, wie Sie Ihre Rails-Modelle und Pfad-Helfer verwenden, um Ihre Sitemap-URLs zu generieren:
# 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
Dann verwenden Sie Rake-Tasks, um die Daten so oft zu aktualisieren, wie Sie möchten. Es ist wirklich so einfach :)