RubyCGIをバックトレースをつけてデバッグする。
普通、CGIでエラーが発生した場合は[500 Internal Server Error]が表示され、どの部分がエラー発生箇所なのか確認することはできない。
自分もちょっと引っかかったのでググってみたら以下のエントリーを発見。
nobuson-ruby.at.webry.info
記述されているソースが分かりづらかったので、ちょっと調べて書いてみる。
#!/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
www.namaraii.com
$!
最近の例外に関する情報を表す Exception クラスのサブクラスのインスタンスです。 raise によって設定されます。
www.ruby-lang.org
$@
例外が発生した時のバックトレースを表す配列です。
www.ruby-lang.org
この関数を使えばRubyCGIのデバッグも分かりやすいです。