コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Railsのpublic/404.htmlはどうやって使われているのか

Rails使ってると、ActiveRecordNotFound とかがraiseで上がった時に勝手にpublic/404.html がでたりしますが、あれが出るのはどういう仕組みなのかっていう部分的メモ(内容がまとまったらもうちょいちゃんと書きたい)

環境

rails (5.2.0)

やっているところ

以下の場所

rails/public_exceptions.rb

def render_html(status)
  found = false
  path = "#{public_path}/#{status}.#{I18n.locale}.html" if I18n.locale
  path = "#{public_path}/#{status}.html" unless path && (found = File.exist?(path))

  if found || File.exist?(path)
    render_format(status, 'text/html', File.read(path))
  else
    [404, { "X-Cascade" => "pass" }, []]
  end
end

render_format の引数にてファイルパスをしていしてロードしている。格別そのままhtmlページをどーん!とかではなくちゃんとrenderとして処理をしていた。

あとがき

この処理に至るまでに話とか、ほかの処理との良い共存方法がありそうなのをググってたら見つけたのでまとめたい所存

参考リンク