2011-02-05 1 views
8

Моего Rails 3 Сайта получить удар по сканерам с странно принимать заголовки, исключение триггера какRails 3 и Strange Accept Headers

ActionView::MissingTemplate occurred in home#show 

Вот некоторые из принимающих заголовков вызывают проблемы

text/* 
application/jxw 
*/*;q=0.1 

В этих случаях это интерпретируется как формат запроса и, как таковой, вызывает недостающую ошибку шаблона. Мне все равно, что я возвращаюсь к этим искателям, но просто хочу избежать исключений.

+0

Это, похоже, разрешено в Rails 3.1. Обсуждение здесь: https://github.com/rails/rails/issues/701 – tee

ответ

7

Вы могли бы спасти от исключения, как это в контроллере приложения и сделать шаблон HTML вместо:

class ApplicationController 
    rescue_from ActionView::MissingTemplate, :with => :render_html 

    def render_html 
    if not request.format == "html" and Rails.env.production? 
     render :format => "html" 
    else 
     raise ActionView::MissingTemplate 
    end 
    end 
end 
+1

Подождите, что? 'not request.format ==" html "'? Вы имели в виду 'request.format! =" Html "? –

+0

Есть ли способ сделать запросы в моей локальной среде, чтобы имитировать проблему? Я хотел бы попробовать это исправление, но я хочу, чтобы убедиться, что он работает для нас, прежде чем использовать его для производства. – blim8183

+1

curl -H 'Accept: image/jpeg' http: // localhost: 3000/youraction – todd

1

Потому что SO предотвращает добавление комментариев, пока у меня не будет репутации 50, я должен представить новый ответ, чтобы ответить на вопрос Райана Бигга в комментариях.

not request.format == "html" более или менее то же, что и request.format != "html". and, or и not логически идентичны &&, || и ! - однако они имеют гораздо более низкий приоритет. Таким образом, в этом примере оператор == оценивает перед оператором not, так что он производит тот же результат, что и с использованием !=.

+1

Несомненно, но Райан, скорее всего, имел в виду, что способ, который формулируется не «foo == bar», значительно усложняет анализ (для человека), чем «foo! = bar». –