ActionView:: Ошибка MissingTemplate, только если вы посетили бот?

У меня есть действие, которое служит моей домашней странице. Он отлично работает при обычном посещении (например, пользователем в веб-браузере), но при посещении конкретными сканерами Интернета он вызывает следующую ошибку:

 A ActionView::MissingTemplate occurred in tags#promoted:

 Missing template tags/promoted with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>["text/*"], :locale=>[:en, :en]} in view paths "/Apps/accounts/app/views", "/usr/local/rvm/gems/[email protected]/gems/devise-1.3.0/app/views"
 actionpack (3.0.4) lib/action_view/paths.rb:15:in `find'

Кажется, что боты пытаются получить формат text/*, для которого нет шаблона, что имеет смысл, поэтому я попытался сделать следующее в своем действии:

  def promoted
   request.format = :html #force html to avoid causing missing template errors
   # more action stuff....
  end

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

Однако каждый раз, когда эти боты запрашивают эту страницу, возникает ошибка отсутствия шаблона.

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

Это единственный способ сделать файл с именем my_action.text.erb и поместить в него какую-то тарабарщину? Или я могу решить это более элегантно?

Ответы

Ответ 1

Я тоже видел их. Вы можете использовать некоторое промежуточное программное обеспечение для перезаписи этих запросов:

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

  def call(env)
    h = env["HTTP_ACCEPT"]
    env["HTTP_ACCEPT"] = "text/html" if h == "text/*"
    @app.call(env)
  end
end

Я искал драгоценный камень для того, чтобы убить некоторые запросы на открытие MS Office, и было бы разумно добавить в него это промежуточное программное обеспечение.

https://github.com/jwigal/rack-options-request

Ответ 2

Оказывается, этот конкретный набор ботов такой же тупой, как рок, и игнорирует любое форматирование запроса, как я пытался это сделать. Я закончил тем, что не разрешил этим агентам ботов в моем robots.txt. Больше ошибок. Однако, если у кого-то есть более элегантное решение, отправьте его, и я пометю его как принятый ответ, иначе я приму это через пару дней.