Index: [Article Count Order] [Thread]

Date: Thu, 28 Apr 2005 06:18:20 +0900
From: Tatsuki Sugiura <sugi@nemui.org>
Subject: [webrickja:135] Re: [PATCH] cgi.rb: config getter
To: webrickja@notwork.org
Message-Id: <874qdrdilf.wl@tempest.nemui.org>
In-Reply-To: <20050428.045933.343189835.gotoyuzo@sawara.priv.tokyo.netlab.jp>
References: <877jiq7w2t.wl@hail.nemui.org>	<20050428.045933.343189835.gotoyuzo@sawara.priv.tokyo.netlab.jp>
X-Mail-Count: 00135

杉浦です。

>>> 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