Ruby on Rails и странный заголовок HTTP_ACCEPT от PSP - PullRequest
6 голосов
/ 21 июля 2011

У меня есть приложение Ruby on Rails (3.1rc4), и я постоянно получаю пару исключений каждый день с одним и тем же пользовательским агентом (Mozilla / 4.0 (PSP (PlayStation Portable); 2.00)). Исключение:

A ActionView::MissingTemplate occurred in home#index:
Missing template home/index, application/index with {:formats=>["*/*;q=0.01"], :locale=>[:en, :en], :handlers=>[:erb, :builder, :arb]}. Searched in:
"/var/www/releases/20110721144523/app/views"

У меня есть app / views / home / index.html.erb, но, похоже, он пытается найти файл для очень странного формата запроса " / ; q = 0,01".

Заголовок HTTP:

 * HTTP_ACCEPT                               : */*;q=0.01

Кто-нибудь может мне помочь с этой проблемой?

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Это распространенная проблема, см. Тикет на Github.

Вы можете явно отображать HTML; просто напишите render "index.html" вместо render. Это вернет HTML вместо 406, хотя. Я надеюсь, что есть лучшие решения.

0 голосов
/ 10 ноября 2012

Обезьяна исправила это в Rails 3.0.x, используя исправление промежуточного программного обеспечения, например:

class FixHttpAcceptHeader
  def initialize(app)
    @app = app
  end

  def call(env)
    case env['HTTP_ACCEPT']
      when 'text/*', '*/*' # add others as needed
        env['HTTP_ACCEPT'] = 'text/html'
    end
    @app.call(env)
  end
end

в application.rb

config.middleware.use "FixHttpAcceptHeader"

протестировано с помощью этого скрипта ruby ​​(где-то нашел этот скриптонлайн, но не помню где ...)

require 'rubygems'
require 'uri'
require 'net/http'
uri = URI.parse("http://localhost:3000")
http = Net::HTTP.new(uri.host, uri.port)

request = Net::HTTP::Get.new(uri.request_uri)
request["Accept"] = "text/*"

response = http.request(request)
puts response.body
0 голосов
/ 09 января 2012

Это известная проблема: https://github.com/rails/rails/pull/4176 Вы можете исправить это с помощью методов response_to и response_with в вашем контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...