我应该使用什么来为heroku上的rails生成站点地图?

时间:2014-12-01 16:07:10

标签: ruby-on-rails heroku amazon-s3 sitemap

作为rails的初学者,由于其只读限制,我发现在Heroku上生成站点地图非常令人生畏。但是,站点地图是我网站的基础,因为它的成功基于SEO。

我已经尝试过dynamic_sitemaps gem,但很快就删除了它,因为我意识到它没有heroku使用的文档。然后我使用了sitemap_generator gem,它使用了几个宝石和外部平台(如Amazon S3)覆盖了heroku集成。然而问题是,作为一个初学者,我遇到了问题并且很难找到它们。

是否有一个解决方案我可以轻松生成站点地图以获得一致的内容,例如heroku平台上的博客帖子?我真的想要起床并运行,如果我必须使用我已经尝试过的方法,可能需要一段时间来配置。

谢谢!

3 个答案:

答案 0 :(得分:0)

已经看过Dynamic Site Maps Gem 这个设置非常简单只需阅读Github中的读取内容,了解更多功能,您还可以查看Site Map Generator gem

祝你好运

答案 1 :(得分:0)

试试这个

控制器

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' }

答案 2 :(得分:0)

我发现了一个小技巧,可以动态生成站点地图文件,但可以将其保留以供以后在 Heroku 上调用。

它适用于小型\中型项目,如果您有一个大型\大型项目,并且数千个页面不断变化,请考虑使用S3存储站点地图文件。

步骤如下:

  1. 按照https://github.com/kjvarga/sitemap_generator

    的说明使用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. 将索引操作添加到您的route.rb文件中

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

  1. 重新启动/部署服务器,然后转到/sitemap.xml

享受?