LoginSignup
20

More than 5 years have passed since last update.

Ruby on Rails4.2で.pngや.jpgや.jsonへの404エラー対応

Posted at

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。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20