dispatch.cgiの最後は Dispatcher.dispatch だけど、
rails-2.3.5/lib/dispatcher.rb によれば、このクラスの実体はActionController::Dispatcher が代入されている。
dispatch の定義は actionpack-2.3.5/lib/action_controller/dispatcher.rb
にあって、
# DEPRECATE: Remove CGI support
def dispatch(cgi = nil,
session_options = CgiRequest::DEFAULT_SESSION_OPTIONS,
output = $stdout)
new(output).dispatch_cgi(cgi, session_options)
end

dispatchを引数を与えずに呼ぶと cgi は nil になるわけだ。

というわけで Dispatcher.dispatch(CGI.new) あたりに直してはどうかと想像。