hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

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

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

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