ピティナ開発者ブログ

全日本ピアノ指導者協会のIT担当者が気まぐれにつづる技術系中心のブログです


Ruby on Rails のカスタムエラーページについて

新入社員の平田です。最近腰を痛めてしまいました。皆様も腰は大切にしてください。

さて、たまにサイトを巡っていると、存在しないページ(ステータスコード:404)、サーバー内部のエラーページ(ステータスコード:500)などがデフォルトのページではなく、そのサイトのデザインに合ったページになっていることが良くあります。今回は、エラーページを自分好みにカスタマイズする際にハマったことをメモしておきます。

基本的なやり方

Ruby on Rails 4系のエラーページの作り方は下記

[Rails 4.x] エラーページの作り方

が参考になります。 routes.rbに書く'anything' のところは 'unmatched_route'でも可です。

ハマったところ

上記のやり方で/hoge/fuga/なんて存在しないページにアクセスしようとすると確かにカスタマイズされたエラーページがでます。しかし、/hoge/fuga.cssなどにアクセスしようとするとTemplate Missingというエラーが出ます。これは、フォーマットを指定したことで、/errors/not_found.cssというファイルにアクセスしようとして失敗していることが原因です。

解決方法

renderの際にフォーマットを指定してやれば解決します。

def rescue404(e)
  @exception = e
  render 'errors/not_found', status: 404
end

上のページを、

def rescue404(e)
  @exception = e
  render 'errors/not_found.html.erb', status: 404
end

このように拡張子込で指定してあげれば解決できます。

(著: 平田 真人)
この記事は現在0人が閲覧中