エラーテンプレートが表示されない
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
になるはずです。
このバグはエラー表示の実装方法が変わったことによって、結果的に修正がされています。
スポンサーリンク





