Что я должен использовать для создания карты сайта для рельсов на героку?

Как новичок в рельсах, я нахожу создание карт сайта на Heroku чрезвычайно сложным из-за его ограничений только для чтения. Тем не менее, карта сайта имеет основополагающее значение для моего веб-сайта, поскольку его успех основан на SEO.

Я попробовал гем dynamic_sitemaps, но вскоре удалил его, так как понял, что у него нет документации для использования heroku. Затем я использовал гем sitemap_generator, в котором была реализована интеграция с heroku с использованием нескольких гемов и внешних платформ, таких как Amazon S3. Однако проблема в том, что как новичок я сталкиваюсь с проблемами, и мне трудно их преодолеть.

Есть ли решение, которое я могу использовать, чтобы легко создавать карты сайта для согласованного контента, такого как сообщения в блогах на платформе heroku? Я действительно хочу начать работу и чувствую, что это может занять некоторое время, чтобы настроить, если мне придется использовать методы, которые я уже пробовал.

Спасибо!


person Cal Peters    schedule 01.12.2014    source источник


Ответы (3)


Взгляните на Dynamic Site Maps Gem это очень просто настроить, просто прочитайте меня в Github для получения дополнительных функций, которые вы также можете посмотреть на жемчужину Site Map Generator

Желаю вам удачи

person Community    schedule 01.12.2014

попробуй так

Контроллер

class SitemapController < ApplicationController


layout nil

def index
  @static_pages = [jobs_url, advertising_url, join_url]
  @offers = Offer.all

  respond_to do |format|
    format.xml
  end
end

end

Вид

    xml.instruct!
xml.urlset(

) do
  @static_pages.each do |page|
    xml.url do
      xml.loc "#{page}"
      xml.changefreq("monthly")
    end
  end
  @offers.each do |offer|
    xml.url do
      xml.loc 
      xml.changefreq("daily")
    end
  end


end

Маршрут

 get 'sitemap.xml', :to => 'sitemap#index', :defaults => { :format => 'xml' }
person user2322409    schedule 01.12.2014

Я нашел небольшой трюк, который позволяет динамически генерировать файл карты сайта, но сохранять его для последующих вызовов в Heroku.

Он отлично работает для проектов малого и среднего размера. Если у вас большой или огромный проект и тысячи страниц, которые бесконечно меняются, рассмотрите возможность использования S3 для хранения файла карты сайта.

Это шаги:

  1. используйте гем sitemap_generator, как указано здесь https://github.com/kjvarga/sitemap_generator

  2. после bundle запустите rake sitemap:install, он создаст для вас файл config/sitemap.rb

  3. отредактируйте файл config/sitemap.rb, чтобы он выглядел следующим образом

    SitemapGenerator::Sitemap.default_host = [your host name goes here]

    SitemapGenerator::Sitemap.public_path = File.join(Rails.root, 'tmp').to_s

    SitemapGenerator::Sitemap.compress = false

    SitemapGenerator::Sitemap.create do

    [all your site pages add commands goes here]

    end

  • что касается имени хоста, я предлагаю, чтобы оно было "#{ENV['HOST_PROTOCOL']}://#{ENV['HOST_NAME']}" (и, конечно же, добавляйте соответствующие переменные среды), чтобы вы могли изменить его в разных средах.
  • Что касается сжатия, начните с false, убедитесь, что у вас все работает отлично, и измените его позже, если это большой файл.
  1. создайте файл контроллера карты сайта — app/controllers/sitemap_controller.rb

  2. Отредактируйте файл контроллера карты сайта, чтобы он выглядел следующим образом.

require 'rake'

class SitemapController < ApplicationController
  def index
    file_name = File.join(Rails.root, 'tmp', 'sitemap.xml').to_s
    
    unless File.exist?(file_name)
      Rails.application.load_tasks
      Rake::Task['sitemap:refresh:no_ping'].invoke
    end
    
    # it's better to be safe than sorry 
    if File.exist?(file_name)
      respond_to do |format|
        format.xml { render file: file_name }
      end
    else
      render file: 'public/404.html', status: :not_found, layout: false
    end
  end
end
  1. Добавьте действие index в файл route.rb.

resources :sitemap, only: %i[index], constraints: ->(req) { req.format == :xml }

  1. перезапустите/разверните сервер и перейдите в /sitemap.xml

Наслаждайтесь ????

person obenda    schedule 28.10.2020