From: OHARA Shigeki Date: 2003-08-14T15:11:06+09:00 Subject: [ruby-list:38104] XMLRPC::ModRubyServer 大原です。 xmlrpc4r を mod_ruby で使っていて、 いくつか気になった点がありましたので報告します。 1. xmlrpc/util.rb で、 instance_eval &p の箇所で、 "warning: `&' interpreted as argument prefix" と warning が出てしまいます。 2. Apache::Request の obsolete なメソッドを使っている箇所があるようです。 warning のとおり、headers_in, headers_out を使う方がいいと思います。 3. XMLRPC::ModRubyServer::new ですが、 二回目以降は実際の処理が行われないようになっているようなのですが、 このせいで、二回目以降の処理では initialize の処理が行なわれず、 既に破棄された @ap (Apache::request) を参照してしまうことになってしまい、 以後の全てが "destroyed request" としてエラーとなってしまいます。 # XMLRPC::CGIServer::new もそうなのですが、 # 私にはちょっとこのココロが良くわかりませんでした。 以上 3点について、修正案として patch を付けておきます。 diff -urN xmlrpc.orig/server.rb xmlrpc/server.rb --- xmlrpc.orig/server.rb Thu Aug 14 14:46:57 2003 +++ xmlrpc/server.rb Thu Aug 14 14:36:47 2003 @@ -508,22 +508,22 @@ =end class ModRubyServer < BasicServer - @@obj = nil +# @@obj = nil - def ModRubyServer.new(*a) - @@obj = super(*a) if @@obj.nil? - @@obj - end +# def ModRubyServer.new(*a) +# @@obj = super(*a) if @@obj.nil? +# @@obj +# end def initialize(*a) @ap = Apache::request super(*a) end - + def serve catch(:exit_serve) { header = {} - @ap.each_header {|key, value| header[key.capitalize] = value} + @ap.headers_in.each {|key, value| header[key.capitalize] = value} length = header['Content-length'].to_i @@ -568,7 +568,7 @@ h['Status'] ||= "200 OK" h['Content-length'] ||= body.size.to_s - h.each {|key, value| @ap[key] = value } + h.each {|key, value| @ap.headers_out[key] = value } @ap.content_type = h["Content-type"] @ap.status = status.to_i @ap.send_http_header diff -urN xmlrpc.orig/utils.rb xmlrpc/utils.rb --- xmlrpc.orig/utils.rb Thu Aug 14 14:46:57 2003 +++ xmlrpc/utils.rb Thu Aug 14 14:55:21 2003 @@ -113,7 +113,7 @@ def initialize(prefix, &p) raise "No interface specified" if p.nil? super(prefix) - instance_eval &p + instance_eval(&p) end def get_methods(obj, delim=".") ---- OHARA Shigeki (大原 重樹)