Рекомендуемый способ или плагин для создания карт сайта Google для приложения Ruby on Rails?
-
03-07-2019 - |
Вопрос
Я выполнил быстрый поиск в Google и не нашел ничего особенного для автоматизации создания и обновления карты сайта Google для приложения Ruby on Rails.Какие-либо предложения?
Решение
Совсем недавно я добавил динамическую карту сайта в приложение блога.Эти шаги должны помочь вам начать.
Добавьте этот маршрут в конец вашего config/routes.rb
файл (над ним должны быть указаны более конкретные маршруты):
map.sitemap '/sitemap.xml', :controller => 'sitemap'
Создайте SitemapController
(приложение/контроллеры/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
—Как видите, это для блога, так же как и использование Post
модель.
Это шаблон представления (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
Вот и все!Вы можете проверить это, вызвав http://localhost:3000/sitemap.xml (при использовании Mongrel) в браузере или, возможно, с помощью cURL.
Обратите внимание, что контроллер использует stale?
метод для выдачи ответа HTTP 304 Not Modified, если с момента последнего запроса карты сайта не было новых сообщений.
Другие советы
Я бы действительно не рекомендовал использовать контроллер и просто маршрутизировать к нему, например, «/sitemap.xml», потому что, если ваши карты сайта будут расти, это приведет к пустой трате ресурсов.Было бы лучше выполнять рейк-задачу и обновлять карты сайта примерно каждую ночь, в зависимости от того, как часто меняется контент.
Если на вашем сайте не около 50 000 страниц и вы не планируете иметь больше, то вы можете поместиться в один файл карты сайта, тогда я предлагаю вам использовать "Карты Google Sitemap с Ruby on Rails, Capistrano и Cron«Я знаю, что он работает прилично, потому что я успешно им пользуюсь.
Примечание: Я бы не советовал использовать авторский способ копирования карт сайта каждый раз при запуске задачи развертывания, на мой взгляд, это нечистоплотно.Лучше использовать общий каталог и символическую ссылку на него при развертывании, тогда у вас будет только одна версия файлов и вы будете тратить пространство, если останутся лишние копии.У меня есть это в моем 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
Также вы можете использовать "Большая карта сайта«Жемчужина, но я нашел ее только сейчас и не могу сказать, насколько она хороша.Похоже, что этот драгоценный камень очень легко настроить, и он также использует ваши рельсовые маршруты для генерации ссылок, так что вам придется решать на одну проблему меньше, чем с первым решением.
Google Sitemap Generator — это официальная версия Google.Его легко установить и настроить.
Я бы рекомендовал вам ознакомиться с sitemap_generator драгоценный камень.Он решает все эти проблемы за вас... и действительно, кто захочет возиться с созданием XML?
Вот пример карты сайта, показывающий, как вы используете модели Rails и помощники путей для создания URL-адресов карты сайта:
# 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
Затем вы используете задачи Rake для обновления так часто, как захотите.Это действительно настолько просто :)