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

2023-12-01

作为 Rails 的初学者,我发现由于其只读限制,在 Heroku 上生成站点地图非常令人畏惧。然而,站点地图是我网站的基础,因为它的成功基于搜索引擎优化。

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

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

Thanks!


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

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

这些是步骤:

  1. use the sitemap_generator按照此处的指示进行宝石https://github.com/kjvarga/sitemap_generator

  2. after bundle, run rake sitemap:install,它将创建一个配置/站点地图.rb为您归档

  3. 编辑配置/站点地图.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. 创建站点地图控制器文件 -应用程序/控制器/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: ->(req) { req.format == :xml }

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

Enjoy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用什么来为 heroku 上的 Rails 生成站点地图? 的相关文章

随机推荐

  • 如何使用 boost::program_options 解析逗号分隔值?

    我需要像这样解析cmd value str1 str2 str3 using boost program options 我找到了完全相同的问题但它不再起作用了 boost 1 55 和 1 56 我尝试定义自己的类和映射器 但没有成功 n
  • 将元数据写入图像时出现问题

    我正在使用 AvFoundation 拍摄静态图像 并将 GPS 信息添加到元数据中 并使用资源库保存到相册 但 GPS 信息根本不保存 这是我的代码 self stillImageTaker captureStillImageAsynch
  • 将字符串替换为两个数组中的值

    我有一个字符串例如 var string This is a text that needs to change 然后我有两个数组 var array1 new Array a e i o u var array2 new Array 1
  • 更改

    我正在尝试使用jQuery更改 a 的背景颜色 div 按下按钮时的部分 下面是执行此操作的代码 为什么它不起作用 HTML文件 div
  • 如何使用 C 程序将 ARM 处理器设置为不同模式?

    我正在研究不同模式的 ARM 处理器 我想检查处理器处于不同模式时的状态 例如 寄存器值 那么有人可以帮助我找到将处理器置于不同模式的示例代码吗 例如 我找到了未定义模式的代码 asm volatile short 0xffff n 如果您
  • Typescript / Webpack 检查是否通过生产配置运行

    我在用webpack reactjs typescript In my tsx代码中 我有一个要求 需要根据我的环境 即生产或开发 路由到 URL 那么 如何检查环境并加载正确的 URL动态地 您可以添加一个插件来定义可以在代码中访问的环境
  • apache mod_jk 向所有集群节点发送请求

    我有一个分布式集群系统 我已经设置了 apache 服务器并设置了负载平衡 mod jk 条件 而且粘性会话也是真实模式 我是否可以向所有 tomcat 集群节点发送一些特殊请求 在请求标头控制之后 有什么规则或者方法吗 不需要发送回客户端
  • 如何将 pdf 下载响应从 api (node/express) 传输到客户端 (react)?

    在我的具体设置中 我有一个生成 pdf 的后端服务器 然后当访问某个端点时 会触发 pdf 下载 但是 由于安全规则 我无法从前端访问该端点 因此我需要使用中间人服务器向后端发出请求 并将其转发到我的客户端 Code 前端 反应 const
  • 如何使用 CloudFormation 在 Redhat 中安装 aws-cfn-bootstrap/cfn-init 软件包?

    我正在尝试使用 CloudFormation 模板启动实例 实例已启动 但 UserData 部分未完全执行 因为cfn init aws cfn bootstrapRedhat 7 AMI 中未安装软件包 我尝试安装aws cfn boo
  • 消息、队列和 ESB - 我知道我想去哪里,但不知道如何到达那里

    长话短说 我正在开展一个项目 出于所有常见原因 我们正在重写一个大型 Web 应用程序 重写的主要目的是将在单个服务器上运行的大型单一应用程序分成许多较小的解耦应用程序 这些应用程序可以在许多服务器上运行 好的 这就是我想要的 我想HTTP
  • Qt 和高 dpi 屏幕

    我读过几篇关于此的文章 所以我有一台 Dell XPS 13 并将文本 应用程序和其他项目的大小更改为 200 但我想我的问题如下 当我通过 Qt Designer 启动应用程序时 一切看起来都很好 但是当我在设计器之外运 行应用程序时 意
  • 从 WPF 中的 Web 浏览器调用 HTML 页面中存在的 JavaScript 函数

    我是 WPF 新手 我在我的 wpf 应用程序中使用 WebBroswer 来渲染 Google 地图 我有一个 googlemap htm 页面 它包含一个初始化 lat log JavaScript 函数 现在我想使用 lat 和 lo
  • javascript 与数组的奇怪行为

    让我们考虑以下 JavaScript 片段 var arr function pushMe var temp name me arr push temp console log arr temp name you arr push temp
  • 根据 W3C XML 架构定义验证 XSD

    我正在生成一些 XML 模式 并希望确保我们的生成器正在创建有效的 XML 模式文档 不是 XML 我试图编写代码来验证 XML 模式文档 但失败了 我没想到会这么复杂 private void validateXsd String xsd
  • 静态内部类需要导入注释

    因此 我正在进行一些 jUnit 测试 并希望编写具有相似功能但足够小以在单个类中编写的不同类 无论设计决定如何 它都会给我带来编译器错误 我不确定我所看到的规则是什么 你可以想象它看起来像 package foo RunWith Suit
  • Realm - 模块文件是由旧版本的编译器创建的

    我使用最新版本的 xcode 和 swift 2 2 我的一个项目 由于错误 我已经好几个月没有打开了 现在还没有构建module file was created by an older version of compiler 我尝试了以
  • Mockito 单元测试 - 时间戳不同

    Mockito 测试存在一些问题 我目前收到此错误 Argument s are different Wanted repository save uk co withersoft docservice repositories hiber
  • 如何取消WCF服务调用?

    我有一个执行时间很长的WCF函数 所以我用backgraundworker在UI中调用该函数 我想提供一个取消执行的功能 所以我中止IComunicationObject 问题是服务执行没有停止 是在这种情况下有什么方法可以停止服务执行吗
  • 尽管 CloudWatch 代理正在运行,但 CloudWatch 日志组丢失

    我在 EC2 实例上看不到 Cloud Watch 代理定义的日志组 此外 默认日志组 var log messages 不可见 我在 root 帐户上也看不到这些日志 我配置了其他日志组并且可见 我有以下设置 亚马逊Linux 附加到实例
  • 我应该使用什么来为 heroku 上的 Rails 生成站点地图?

    作为 Rails 的初学者 我发现由于其只读限制 在 Heroku 上生成站点地图非常令人畏惧 然而 站点地图是我网站的基础 因为它的成功基于搜索引擎优化 我尝试过dynamic sitemaps gem 但很快就删除了它 因为我意识到它没
Powered by Hwhale