こんにちは、金井です。

cgi.rbを使ってWEBアプリを開発しています。
RxCGI という名前の、CGIのサブクラスを作成しているのですが、次のような
ワーニングが出ます。
環境は Win2000SP4/Apache2.0.47/ruby1.8.0ですが、1.6.8でも同様です。

C:/usr/local/lib/ruby/1.8/cgi.rb:1963:in `class_eval': (eval):1:in 
remove_const': constant RxCGI::CGI_PARAMS not defined (NameError)
    from C:/usr/local/lib/ruby/1.8/cgi.rb:1963:in `class_eval'
    from C:/usr/local/lib/ruby/1.8/cgi.rb:1963:in `initialize'
    from C:/usr/local/lib/ruby/1.8/cgi.rb:1961

これは、次のような記述で引っかかっています。

  self.class.class_eval("remove_const(:CGI_PARAMS)")
  self.class.class_eval("remove_const(:CGI_COOKIES)")

self.classはこの場合はCGIではなくRxCGIだからCGI_PARAMという定数は定義
されていないことになるわけです。そこで次のように書き換えたところ、
ワーニングは出なくなりました。

  CGI.class_eval("remove_const(:CGI_PARAMS)")
  CGI.class_eval("remove_const(:CGI_COOKIES)")

これで問題なく動作しているのですが、今ひとつ自信が持てません。
・上記のような修正で正しいのか
・そもそもCGIのサブクラスを作るという使い方は想定されていないのか
どうしたものでしょうか。

--
金井 隆 (KANAI Takashi)
kanai / nn.iij4u.or.jp