杉浦です。
>>> In Message "[webrickja:134] Re: [PATCH] cgi.rb: config getter"
>>> <20050428.045933.343189835.gotoyuzo@sawara.priv.tokyo.netlab.jp>,
>>> GOTOU Yuuzou <gotoyuzo@notwork.org> said;
> > gonzui の CGI-if を書いているときに、servlet から @config に
> > アクセス出来ない事に気づきました。他にも logger 等いくつかの
> > アクセサが抜けているようです。
> > 取り合えずパッチを書いてみたのですが、こんなので如何でしょうか?
> 取り込もうと思いますが、これらのインスタンス変数は、
> WEBrick::CGIのインスタンスメソッドから参照できればいいような
> 気もします。どういうふうに使っていらっしゃるのでしょうか?
自作したハンドラ(Servlet)へ server の代わりに WEBrick::CGI の
インスタンスを渡しても、変更なくそのまま動いて欲しいというのが望みです。
今だと、例えばこんな感じで全部 FileHandler に投げる CGI を組むと
--------- through.cgi -------------------------
#!/usr/bin/ruby
require 'webrick'
require 'webrick/cgi'
include WEBrick
class ThroughCGI < ::WEBrick::CGI
def service(req, res)
HTTPServlet::FileHandler.get_instance(self, Dir.pwd).service(req, res)
end
end
ThroughCGI.new.start
-----------------------------------------------
渡された server.config を呼んで落ちてしまいます。
ERROR NoMethodError: undefined method `config' for #<ThroughCGI:0xb7c2e2f8>
/usr/lib/ruby/1.8/webrick/httpservlet/filehandler.rb:140:in `initialize'
/usr/lib/ruby/1.8/webrick/httpservlet/abstract.rb:23:in `new'
/usr/lib/ruby/1.8/webrick/httpservlet/abstract.rb:23:in `get_instance'
through.cgi:10:in `service'
/usr/lib/ruby/1.8/webrick/cgi.rb:72:in `start'
through.cgi:17
-------- httpservlet/filehandler.rb +140 ------
def initialize(server, root, options={}, default=Config::FileHandler)
@config = server.config
-----------------------------------------------
勿論作った CGI にアクセサを書けば通りますが、どうせ大抵追加するなら
親クラスで定義しておくのが良いかなと思いまして。
[](key) スタイルの方は gonzui CGI の作業をしていて気付いたのですが、
AbstractServlet でも使われているようです。
--
Tatsuki Sugiura mailto:sugi@nemui.org