【问题标题】:What should I be using for sitemap generation for rails on heroku?我应该使用什么来为heroku上的rails生成站点地图?
【发布时间】:2015-01-29 16:37:44
【问题描述】:

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

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

有没有一种解决方案可以让我轻松地为 heroku 平台上的博客文章等一致的内容生成站点地图?我真的很想启动并运行,如果我必须使用我已经尝试过的方法,我觉得这可能需要一段时间来配置。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    查看Dynamic Site Maps Gem ,设置非常简单,只需阅读 Github 中的自述文件,了解更多功能,您还可以查看 Site Map Generator gem

    祝你好运

    【讨论】:

      【解决方案2】:

      这样试试

      控制器

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

      【讨论】:

        【解决方案3】:

        我想出了一个小技巧,它可以动态生成站点地图文件,但将其保留以供以后调用Heroku

        它非常适合中小型项目,如果你有一个很大的项目,并且有成千上万的页面不断变化,请考虑使用 S3 来存储站点地图文件。

        这些是步骤:

        1. 按照此处的说明使用sitemap_generator gem 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. 将索引操作添加到您的 routes.rb 文件中

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

        1. 重新启动/部署您的服务器并转到 /sitemap.xml

        享受?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-03-17
          • 2011-07-08
          • 2017-02-03
          • 2021-04-18
          • 1970-01-01
          • 1970-01-01
          • 2020-05-22
          相关资源
          最近更新 更多