エラーテンプレートが表示されない

Ruby on Railsでは、500エラーなどが発生したときには /public/500.html が呼ばれるような想定になっています。


しかしRailsバージョン2.0.0〜2.2.3では、このテンプレートは呼ばれることはない。

エラーを表示させる部分のコードは下記になります。

C:\Ruby\lib\ruby\gems\1.8\gems\actionpack-【バージョン番号】\lib\action_controller\dispatcher.rb

def failsafe_response_body(status)
  error_path = "#{error_file_path}/#{status.to_s[0..3]}.html"

  if File.exist?(error_path)
    File.read(error_path)
  else
    "<html><body><h1>#{status}</h1></body></html>"
  end
end

『エラー用のテンプレートがあればテンプレートを、なければエラーのみを表示させる』というコードです。

ところが、このコード部分

#{status.to_s[0..3]}.html

これでは、たとえば500エラーだったときには、『 500 .html 』と間にスペースが入ってしまいます。
当然、エラー用テンプレートは見つかることはなく、テンプレートは表示されません。

正しくは

#{status.to_s[0..2]}.html

になるはずです。

このバグはエラー表示の実装方法が変わったことによって、結果的に修正がされています。

スポンサーリンク

スポンサーリンク

CHARACTER_LENGTH関数 文字列長を求める

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る