こんにちは。 Yukihiro Matsumoto wrote on the <1066400910.062715.3606.nullmailer / picachu.netlab.jp> >うーん、mod_rubyはそもそもCGI 100%互換じゃないですからねえ。 >完全互換にできない以上、mod_rubyでも動かしたいなら出力に気を >つけろというのは許される範囲の制限だと私は思います。 そうですね。いきなり嵌りそうな点はこの辺でしょうか。 ●標準出力への出力はすべてmessage-bodyとなる CGIでは次のようにヘッダに続けてbodyを出力するように書きますが、 mod_rubyではすべてmessage-bodyとして扱われます。 print "Content-Type: text/html\n\n" print "foo\n" 上記のスクリプトは、mod_rubyでは、Content-Typeの行も表示されます。 FAQにはNPH-CGIのように動作すると書かれていますが、実際にはそのようには なっていませんよね? ●標準出力への出力は、$stdoutを使う 標準出力オブジェクトを明示的に指定する場合は、STDOUTではなく、 $stdoutを使わなければなりません。 ●ヘッダの出力は、send_http_headerメソッドを使う ヘッダを出力するには、次のようにheaders_outなどに値を指定して、 send_http_headerを呼び出します。 Apache.request.content_type = "text/html" Apache.request.headers_out["foo"] = "bar" Apache.request.send_http_header() CGI#headerを使えば、CGIとmod_rubyの両方で動くように書けます。headerメ ソッドは、CGIではヘッダ文字列を返しますが、mod_rubyではヘッダを出力し ます。そのため、headerメソッドの戻り値を利用するようなスクリプトは修正 しなければなりません。 cgi = CGI.new print cgi.header() # mod_rubyでは標準出力には何も出力されない print "foo\n" -- HORIKAWA Hisashi (in Kanji: 堀川 久) Netsphere Laboratories http://www.nslabs.jp/