[ruby-list:41687] IIS 6.0 上での ERuby + CGI;:Session の動作

From: tamiyasu_m@...
Date: 2005-12-09 07:18:47 UTC
List: ruby-list #41687
村上と申します。

拙作のeRubyが特定の環境で、動作しなかったため、原因を調査したのですが、
自力では解決不能な状況のため、質問させてください。

Windows 2003 (SP1) Server の 上で
C:\>eruby.exe --version
eRuby version 1.0.5
ruby 1.8.3 (2005-07-22) [i386-mswin32]
が動作しており、IIS 6.0にCGIとしてruby/erubyが動作する仮想ディレクトリを
設定しました。

eRubyで、以下のようなものを作り、
====ここから
%require 'cgi'
%require 'cgi/session'
%
%ERuby.noheader = true
%cgi = CGI.new
%session = CGI::Session.new(cgi,{'tmpdir' => 'd:/temp'})
%
%t = Time.now.to_s
%lastdotime = session['lastdotime']
%session['lastdotime'] = t
%                                                  #(12)
%session.close
%
%print cgi.header({'type' => 'text/plain'})
<%=[t, lastdotime].join("\n")%>
====ここまで

ブラウザからアクセスしたところ、
1度目にアクセスと期待通り、1つだけ日時が表示されるのですが、
2度目、エラーが発生して、動作不能になってしまいます。
(ブラウザには、以下のような、IISからの?メッセージが表示されます。)
CGI Timeout
The specified CGI application exceeded the allowed time for processing.
The server has deleted the process.

また、1度目に作成されたd:/tempにあるセッションファイルが、2度目実行直後
に0Byteになり、タイムアウトするまで"eruby.exe"がタスクマネージャに表示さ
れ続けます。
タイムアウトで強制終了されるせいか、%begin〜%rescue Exception〜%endで囲
んで、エラーの内容を得ることも出来ませんでした。
実行した行番号を無理矢理ファイルに書き出して確認すると、12行目(#(12)のと
ころ)までは実行されているようです。

またほぼ同様の内容を Ruby Script で同様の動作をするようにした以下のスク
リプトでは、期待通り、1度目は、実行した時間、2度目は実行した時間 + 前回
実行した時間が表示されます。
====ここから
require 'cgi'
require 'cgi/session'

cgi = CGI.new
session = CGI::Session.new(cgi, {'tmpdir' => 'd:/temp'})

t = Time.now.to_s
lastdotime = session['lastdotime'].to_s
session['lastdotime'] = t

session.close

print cgi.header({'type' => 'text/plain'})
print [t, lastdotime].join("\n")
====ここまで

Windows XP + IIS 5.1 や
Windows 2003 + Apache2 等でも確認しましたが
eruby/rubyとも、(tempディレクトリを存在するドライブに移動するなどすれば)
期待通りの動作をします。

もし、解決方法や原因をご存じの方がいらっしゃいましたら、ご教授願えません
でしょうか?

村上民恭


In This Thread

Prev Next