メイン処理をする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)