From: akira yamada Date: 2002-04-04T13:29:25+09:00 Subject: [ruby-dev:16745] session.rb: in `update': undefined method `each' for nil ruby-listのcgi/sessionについての 話を追いかけていて気付いたのですが ruby -rcgi/session -e 's=CGI::Session.new(CGI.new,"session_id"=>"abc"); s.close;' を2回実行すると2回目の実行で /usr/lib/ruby/1.6/cgi/session.rb:139:in `update': undefined method `each' for nil (NameError) from /usr/lib/ruby/1.6/cgi/session.rb:147:in `close' from /usr/lib/ruby/1.6/cgi/session.rb:92:in `close' from -e:1 という例外が発生します。 FileStoreで、セッションに対応するファイルが見付かった場合、 @hashが初期化されず、そのまま何もせずcloseされるとupdateでおちる ということのようです。 こうすると問題を回避できるのですが、どんなものでしょう? Index: lib/cgi/session.rb =================================================================== RCS file: /home/akira/.cvsup.d/ruby/ruby/lib/cgi/session.rb,v retrieving revision 1.6.2.7 diff -u -r1.6.2.7 session.rb --- lib/cgi/session.rb 1 Dec 2001 14:07:01 -0000 1.6.2.7 +++ lib/cgi/session.rb 4 Apr 2002 04:05:40 -0000 @@ -134,6 +134,7 @@ end def update + return unless @hash @f.rewind for k,v in @hash @f.printf "%s=%s\n", CGI::escape(k), CGI::escape(v) -- akira yamada