読者です 読者をやめる 読者になる 読者になる

hotoolong's blog

Railsやvimや気になったことを綴ってます

Accept: */*; で MissingTemplateになってしまうのを防ぐ

Rails

topページヘのアクセスでたまに変なExceptionが出てたのです。

ActionView::MissingTemplate (Missing template pages/top, application/top with {:locale=>[:ja], :formats=>["*/*;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

一見何がおかしいのかよくわからなかったですが、

HTTP Headerが Accept: /; で送られるとエラーになり Accept: / とセミコロンがない場合はhtmlのテンプレートが判断されて セミコロンがついてるとMissingTemplateになってしまうようです。

UAをみていると Baidu Browser のようですが、ExceptionがでてSlackなどに通知されてしまうのも何なので

ActionView::MissingTemplate (Missing template mall_front/pages/top, mall_front/application/top with {:locale=>[:ja], :formats=>["/;"], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :slim, :coffee, :jbuilder]}. Searched in:

ApplicationController に以下のように設定すると防げました。

before_atcion :default_request_format

def default_request_format
  request.format = :html if request.format == '*/*;'
end

あんまり困っている人がいないのか、ググっててもあまり載ってないですね。