maneira recomendada ou plugin para criar sitemaps do Google para ruby ??on rails aplicativo?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu fiz uma pesquisa rápida no Google e não vi nada super-grande para automatizar a criação e atualização do meu google mapa do site para o ruby ??on rails aplicativo. Alguma sugestão?

Foi útil?

Solução

Eu adicionei um mapa do site dinâmico para um aplicativo de blog recentemente. Estes passos devem você começar.

Adicione esta rota para o fundo do seu arquivo config/routes.rb (mais rotas específicas devem ser listados acima dela):

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

Criar a 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

-Como você pode ver, este é um blog, por isso é usando um modelo Post.

Este é o modelo de visão (app / views / mapa do site / 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

É isso aí! Você pode testá-lo, trazendo até http: // localhost: 3000 / sitemap.xml (se estiver usando Mongrel ) em um navegador, ou talvez usando cURL.

Note que o controlador usa o método stale? para emitir uma resposta HTTP 304 não modificado se não houver novas mensagens sinces o mapa do site foi última solicitados.

Outras dicas

Eu realmente não recomendo usando o controlador e simplesmente roteamento a ele como '/sitemap.xml', porque se seus Sitemaps vai crescer ele vai perder resourses. Seria melhor para fazer uma tarefa rake e sitemaps regenerados todas as noites ou mais, dependendo da freqüência com as alterações de conteúdo.

Se o seu site não tem em qualquer lugar perto de 50000 páginas e você não está planejando ter mais então você pode caber em um arquivo sitemap então eu sugiro que você use " Google Sitemaps com ruby ??on Rails, Capistrano, e cron " Eu sei que funciona decentemente porque eu estou usando-o com sucesso atm.

Nota: eu não iria sugerir o uso de autores maneira de copiar sitemaps cada momento em que tarefa de implementação é executado, na minha opinião não é limpo. É melhor usar diretório e ligação simbólica compartilhada para ele em implantação, então você vai ter a certeza de ter apenas uma versão de arquivos e agora perdendo espaço se cópias extras ficar para trás. Eu tenho isso na minha 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

Além disso, você pode usar " Big sitemap " gem, mas eu tê-lo encontrado apenas agora e não posso te dizer o quão bom ele é. Parece que ele é realmente fácil de configurar esta jóia e ele também usa seus trilhos rotas para a geração de link, assim você terá um problema a menos para resolver do que com a primeira solução.

O Sitemap Generator Google é a liberação oficial do Google. É fácil de instalar e configurar.

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

Eu recomendo que você verifique o sitemap_generator gem . Ele lida com todas essas questões para você ... e realmente, quem quer mexer autoria XML?

Aqui está um exemplo mapa do site para mostrar como você usa seus modelos Rails e ajudantes caminho para gerar seus URLs mapa do site:

# 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

Em seguida, você usar tarefas Rake para atualizar tão frequentemente como você gostaria. É realmente muito simples:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top