超メモ帳(Web式)@復活

統合失調症を患い、はてなからも逃亡。現在、復活のため準備中。


SPONSORED LINK

RubyCGIをバックトレースをつけてデバッグする。


普通、CGIでエラーが発生した場合は[500 Internal Server Error]が表示され、どの部分がエラー発生箇所なのか確認することはできない。


自分もちょっと引っかかったのでググってみたら以下のエントリーを発見。


http://nobuson-ruby.at.webry.info/200504/article_10.html


記述されているソースが分かりづらかったので、ちょっと調べて書いてみる。

#!/usr/local/bin/ruby 

require 'cgi'

#デバッグファンクション
def error_cgi
  print "Content-Type: text/html\n\n"

  puts "*** CGI Error List ***"
  puts "<br /><br />"
  
  puts "#{CGI.escapeHTML($!.inspect)}"
  puts "<br /><br />"
  
  $@.each do |x|
    print CGI.escapeHTML(x) + "<br />"
  end
end

#CGIテスト
def print_test
  print "Content-Type: text/html\n\n"
  putss "hello,world"
end

#main
begin
  cgi = CGI.new
  #cgiの処理
  print_test
rescue 
  error_cgi
end


わかんなかった関数、メソッドを解説。

例外処理


beginとendの間に記述。


rescue
# 例外が発生したときの処理


else
# 例外が発生しなかったときに実行される処理


ensure
# 例外の発生有無に関わらず最後に必ず実行する処理

begin
  dest = open("backup/passwd", "w")
  source = open("/etc/passwd")
rescue
  Dir::mkdir("backup")
  retry
else
  dest.write(source.read)
  dest.close
  source.close
ensure
  puts "script end."
end


http://www.namaraii.com/rubytips/?%CE%E3%B3%B0

$!


最近の例外に関する情報を表す Exception クラスのサブクラスのインスタンスです。 raise によって設定されます。


Ruby Reference Manual

$@


例外が発生した時のバックトレースを表す配列です。


Ruby Reference Manual



この関数を使えばRubyCGIのデバッグも分かりやすいです。

プライバシーポリシー免責事項