gpt4 book ai didi

ruby-on-rails - Googlebot 收到现有模板的缺失模板错误

转载 作者:行者123 更新时间:2023-12-03 12:42:37 26 4
gpt4 key购买 nike

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

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标题 .虽然有效( see W3 reference ),但它添加了 q=0.6 (最后一个数字可能会改变)用作分隔符。由于没有指定其他媒体类型,因此 q=0.6没有必要,我认为这就是 Rails 没有正确处理标题的原因。

(它似乎取决于 Rails 版本。在 Rails 3.0.12 上,它会引发 MissingTemplate 异常。)

将先前答案中的以下代码添加到相关 Controller 是不够的:它响应错误 406 .

respond_to do |format|
format.html
end

在 Rails 3.0.12 和 下完成这项工作有东西返回给 GoogleBot (优于 406 错误),您需要添加此代码,将请求的格式设置为 html尽快 */*;q=0.6 - 像 HTTP_ACCEPT检测到(Rails 将 header 值加载到 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 索引的任何 Controller 操作中,这真的不是 DRY!

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

您可以在 gist 中找到中间件、加载初始化程序和集成测试。 .

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

关于ruby-on-rails - Googlebot 收到现有模板的缺失模板错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8881756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com