2015-06-20 5 views
2

сайт Производство на Rails 4.2.1Rails отсутствуют ошибки шаблона, только периодически

Все хорошо, но иногда получаю странные ошибки на домашней странице:

Missing template home/index, application/index with {:locale=>[:en], :formats=>["text/html;text/plain"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in: 
[...] /releases/20150619150924/app/views" 
[...] shared/bundle/ruby/2.1.0/gems/devise-3.5.1/app/views" 

Очевидно приложение/Views/дом/индекс. html.erb существует и отлично работает отлично, но кажется, что он пропустил время от времени. Не уверен, что здесь происходит, как это может происходить только изредка? Я никогда не получаю это от постановки или разработчика.

Обратите внимание, что это происходит только раз в несколько сотен страниц.

Я что-то упустил? Будьте благодарны за любые указатели.

+0

Когда это произойдет ? после создания записи? –

+0

Я предполагаю, что тип mime запроса странный, и рельсы пытаются найти что-то еще, кроме '.html.erb'. Internet Exploder 6 известен этим типом махинаций. – max

+0

@ AhmadAl-kheat Привет, нет, просто загрузите главную страницу (GET) – bobomoreno

ответ

3

Причиной этой ошибки является неправильный заголовок, вы можете просто воспроизвести его с помощью локонов запроса:

curl -v -H "Accept: text/html;text/plain" http://your.domain 

Кажется кто-то допустил ошибку, когда писал свой бот. Это один правильный:

curl -v -H "Accept: text/html; q=0.2 text/plain" http://your.domain 

Это один действует тоже:

curl -v -H "Accept: text/html,text/plain" http://your.domain 

RFC: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1

Вы можете это исправить с помощью промежуточного слоя:

# lib/fix_accept_header.rb 
class FixAcceptHeader 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    if env["HTTP_ACCEPT"] =~ %r(text/html;\s*text/plain) 
     env["HTTP_ACCEPT"] = "text/html, text/plain" 
    end 

    @app.call(env) 
    end 
end 

# config/application.rb 
require File.expand_path('../../lib/fix_accept_header', __FILE__) 
#... 

class Application < Rails::Application 
    #... 

    config.middleware.use FixAcceptHeader 
end 
+0

Отлично, спасибо. Хорошо знать, что это не проблема с моим приложением. – bobomoreno

Смежные вопросы