メイン処理をするRubyスクリプトファイルは別にあって、フロント部分のCGIとして使うサンプルコード。
エラー発生時には404 NotFoundを返すけど、エラーログにはちゃんとエラーの内容を出力する。
#!/usr/bin/env ruby
BEGIN { $defout.binmode }
$KCODE = 'u'
# Rubyライブラリの探索パス$:にこのファイルのあるディレクトリを追加
def init_modules()
if FileTest::symlink?(__FILE__)
# シンボリックリンクしているときは元のファイルの場所を追加
_dir = File::dirname(File::readlink(__FILE__))
else
_dir = File::dirname(__FILE__)
end
$:.unshift(_dir.untaint)
end
begin
init_modules()
# メイン処理をするスクリプトを読み込む
require 'hogelib/hoge'
# メイン処理を実行
hoge_main()
rescue Exception
# エラー発生時
# WebページにはNot Foundを出力
print "Status: 404 Not Found\n"
print "Content-Type: text/html\n\n"
puts "<h1>404 Not Found</h1>"
# 標準エラー出力(エラーログ)にはエラーの内容を出力
$stderr.puts "[hoge error]"
$stderr.puts "#{$!} (#{$!.class})"
$stderr.puts $@.join("\n")
$stderr.puts "[hoge error]"
end
「$:」はライブラリの場所。
Rubyライブラリをロードするときの検索パスです。
Kernel.#load や Kernel.#require がファイルをロードする時に検索するディレクトリのリストを含む配列です。
起動時にはコマンドラインオプション -I で指定したディレクトリ、環境変数 RUBYLIB の値、コンパイル時に指定したデフォルト値、 "." (カレントディレクトリ) をこの順番で含みます。
variable $-I
tags: ruby
Posted by NI-Lab. (@nilab)