Эти ошибки происходят из-за того, что GoogleBot форматирует свой HTTP_ACCEPT
заголовок .Несмотря на действительность ( см. Ссылку W3 ), он добавляет q=0.6
(последняя цифра может измениться) , который используется в качестве разделителя.Поскольку не указан другой тип носителя, этот q=0.6
не является необходимым, и я предполагаю, что именно поэтому Rails неправильно обрабатывает заголовок.
(Кажется, это зависит от версии Rails.В Rails 3.0.12 возникает исключение MissingTemplate
.
Добавление следующего кода из предыдущего ответа для соответствующего контроллера недостаточно: оно отвечает с ошибкой 406
.
respond_to do |format|
format.html
end
Чтобы это работало в Rails 3.0.12 и , чтобы что-то возвращалось в GoogleBot (лучше, чем ошибка 406
), вам необходимо добавить этот код, который устанавливает формат запросана html
, как только будет обнаружен */*;q=0.6
-подобный 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, что на самом деле не СУХОЙ!
Чтобы устранить эту проблему раз, я реализовал небольшое промежуточное программное обеспечение Rack, которое дажелучше : проверяетзаголовок квеста HTTP_ACCEPT
и заменит любой заголовок, соответствующий */*;q=0.6
(цифры могут отличаться) на общий */*
.Это даже лучше, потому что, поскольку q=0.6
не имеет смысла, если за ним не следует другой тип носителя, это изменение заголовка не меняет своего значения. Мы не принуждаем Rails к какому-либо конкретному формату, мы просто сообщаем ему, что любой будет делать так, как он может понять.
Вы можете найти промежуточное ПО, загрузочный инициализатор и интеграционный теств этой сущности .
версия Gem здесь: https://github.com/ouvrages/rails_fix_google_bot_accept