Googlebot 收到现有模板缺少模板错误

2024-05-14

在过去的几天里,当谷歌机器人尝试访问我们的主页(欢迎/索引)时,我们开始收到缺少模板的错误。我已经盯着这个看了几个小时,知道我只是错过了一些简单的东西。

A ActionView::MissingTemplate occurred in welcome#index:
Missing template welcome/index with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml, :haml], :formats=>["*/*;q=0.9"], :locale=>[:en, :en]}

但模板确实存在(index.html.haml)。如果没有,没有人可以访问我们的主页。

以下是一些额外的环境信息:

* REMOTE_ADDR                               : 66.249.72.139
* REMOTE_PORT                               : 56883
* REQUEST_METHOD                            : GET
* REQUEST_URI                               : /

* Parameters: {"controller"=>"welcome", "action"=>"index"}

如果您有任何见解,我们将不胜感激。


这些错误来自于GoogleBot 格式化其HTTP_ACCEPT header。有效期间(参见 W3 参考 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html),它添加了一个q=0.6 (最后一个数字可能会改变)用作分隔符。由于没有指定其他媒体类型,因此q=0.6没有必要,我认为这就是 Rails 没有正确处理 header 的原因。

(这似乎取决于 Rails 版本。在 Rails 3.0.12 上,它引发了MissingTemplate例外。)

将先前答案中的以下代码添加到相关控制器是不够的:它会返回错误406.

respond_to do |format|
  format.html
end

为了使其在 Rails 3.0.12 下工作并且将某些内容返回给 GoogleBot(比406错误),您需要添加此代码,将请求的格式设置为html一旦*/*;q=0.6-like HTTP_ACCEPT检测到(Rails 将标头值加载到request.format).

# If the request 'HTTP_ACCEPT' header indicates a '*/*;q=0.6' format,
# we set the format to :html.
# This is necessary for GoogleBot which perform its requests with '*/*;q=0.6'
# or similar HTTP_ACCEPT headers.
if request.format.to_s =~ %r%\*\/\*%
  request.format = :html
end

respond_to do |format|
  format.html
end

在工作时,该解决方案需要将代码添加到您想要由 GoogleBot 索引的任何控制器操作中,这真的不是 DRY!

为了彻底解决这个问题,我实现了一个小型 Rack 中间件,它的效果甚至更好:它检查请求的HTTP_ACCEPT标头,并将替换任何匹配的标头*/*;q=0.6 (数字可能有所不同)由共同的*/*。这甚至更好,因为自从q=0.6如果后面没有其他媒体类型,则没有任何意义,标头的更改不会改变其含义。我们不会强迫 Rails 成为任何给定的格式,我们只是以它可以理解的方式告诉它任何将要做的事情。

您可以在此找到中间件、加载初始化程序和集成测试gist https://gist.github.com/2590040/93cb2faca1ba5ead73222e74ca11790e3efb22de.

宝石版本在这里:https://github.com/ouvrages/rails_fix_google_bot_accept https://github.com/ouvrages/rails_fix_google_bot_accept

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

Googlebot 收到现有模板缺少模板错误 的相关文章

  • 为什么将 Backbone.js 与 Rails 结合使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 current_user 传递给 Sidekiq 的 Worker

    我正在努力通过current user or User find 1 到工作模块 但在 sidekiq 的仪表板中出现错误 localhost 3000 sidekiq retries NoMethodError 未定义方法 支持 字符串
  • Rails、Facebook API、Koala gem — 获取“喜欢”某个页面的用户的所有个人资料

    使用 Rails3 和 koala gem 如何检索 喜欢 FB 页面的用户的所有个人资料 例如 http facebook com DAKINE 有可能吗 作为最终结果 我需要获取一堆存储在数据库中的用户配置文件 Thanks 在 Fac
  • 前面的冒号:YAML 语法

    我目前在项目中使用 Sidekiq 并且有以下 YAML 配置文件 concurrency 5 pidfile tmp pids sidekiq pid logfile log sidekiq log staging concurrency
  • javascript - Twitter bootstrap jquery 插件未编译用于生产

    我正在使用 Twitter Bootstrap 开发 3 1 Rails 应用程序塞胡纳克的宝石 https github com seyhunak twitter bootstrap rails 在生产模式下 我可以通过管道预编译使用基本
  • 在社交媒体 Ruby On Rails 上共享链接时的小预览

    我正在开发一个前端位于的网站angularjs和后端ROR Same ROR API用于android app还 现在我这里有一个情况 我需要在社交媒体上分享我的网站帖子 例如facebook twitter and google plus
  • Grails(现在)值得吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道这是一个复制 https stackoverflow com questions 397228 is grails worth it然而
  • 如何避免ActiveRecord模型双重保存?

    型号 一 class One lt ActiveRecord Base before save do stuff private def do stuff two Two find 8 two field2 Value two save e
  • 部署到 Heroku 时出现“rake 中止!堆栈级别太深”

    我的网站曾经运行正常 Heroku 预编译了资产和所有内容 现在 似乎不知从何而来 我开始在部署时收到此消息 Preparing app for Rails asset pipeline Running rake assets precom
  • rvm + Rails3 + gmaps4rails -acts_as_gmappable

    我是一个红宝石导轨之类的菜鸟 抱歉 如果我的问题很愚蠢 我设置了一个运行 ruby 1 8 7 p334 的 rvm 作为用户 环境 我已经为我的 应用程序 创建了一个 gemset 现在我想在页面上显示地址的地图 我四处寻找 发现了 gm
  • Heroku 域名注册配置为雪松栈上的竹子

    我在 Cedar Stack 上运行时遇到 Heroku 的 DNS 配置问题 当我的自定义域具有正确的指向 CNAME 记录并正确配置为 Heroku 指令时 它一直认为我正在将 Cedar 堆栈路由到 Bamboo 事情是这样的 我最近
  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • 在 Rails 中实现友谊模型的最佳方式

    我想在我的应用程序中实现用户的朋友系统 所以我发现 Rails 空间解决方案非常好 其想法是创建两行 in the Friendships table 第一行为发送者邀请 第二行为接收者 用户之间的关系设置为has many像这样的协会 h
  • ExecJS::Runtime在 Rails 4.1.4 中不可用

    UPDATE 现在一切正常了 谢谢deep https stackoverflow com users 2300000 deep 我安装了 node js 然后得到了一个 TZInfo DataSourceNotFound 错误 通过添加解
  • ActionMailer 响应“501 5.5.4 无效参数”

    我正在 Ruby 2 0 0 上使用 Rails 4 开发一个应用程序 在 Devise 中注册后 应用程序会发送一封电子邮件 这是发送电子邮件的代码 应用程序 模型 sponsor rb after create send email t
  • 需要帮助设置 ruby​​ on Rails javascript 运行时环境

    我在我的机器上设置 ruby on Rails 时遇到问题 我一直在关注 Agile Web Development with Rails 这本书 到目前为止一切都进展顺利 我遇到的问题是当我输入时 rails server 我收到以下错误
  • Ruby on Rails(三)隐藏部分视图

    我正在开发 Ruby on Rails 3 Web 应用程序 我有一个名为User有一列名为role 我正在寻找对视图的这些部分具有 错误 角色的用户隐藏视图部分的最佳方法 例如我希望所有用户都能够看到用户index页面 但我只想要具有角色
  • 如何在rails中创建带有外键别名的装置?

    我有两个模型 App and User 其中App有一个创造者 他是User app rb class App lt ActiveRecord Base belongs to creator class name User end user
  • 嵌套表单的解决方案

    我已经被这个问题困扰了一段时间 需要制作一个表格比赛 category与自定义输入 它应该取所有值信息表并构建输入 但棘手的部分是它应该保存到类别 信息 table class Competition lt ApplicationRecor
  • Rails3-jquery-autocomplete 如果没有可用数据则清除字段

    我正在使用rails3 jquery autocomplete 如果自动完成没有返回结果 是否可以清除自动完成字段的值 我试图阻止用户提交数据库中没有的值 我使用的是旧版本 但我实现了change处理程序autocomplete call

随机推荐