error内容
本来404エラーが返ってきたら、rescue_fromで404に飛ばしているが
/~.pngや/~.jpgにアクセスすると
Missing template errors/error_404 with {:locale=>[:ja], :formats=>[:png], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}.
そんなテンプレートないよって言われる
原因
- .pngにアクセスした場合、formats=>[:png]になる
- 今回はErrorsControllerからerrorファイルを探しているがデフォルトのformatsは.html.erb
- そして.pngなんてもちろんviews/errorにない。ゆえにmissing templateと怒られた。
- slackで500エラーを通知する設定をしていたから、アホほどエラー通知が来て辛かった。ことをキッカケに気づく...
対策
今回は.pngアクセスでの404エラーを適切に返したいので
以下のようにフォーマット毎に処理を分けた
respond_to do |format|
format.html { render template: 'errors/error_404', layout: 'error_layout', status: 404 }
format.all { render nothing: true, status: 404 }
end
その他
今後json等返したい機会出てきそう。そのとき詰まりそうだからmemo。