[#45318] Windows コマンドプロンプトで UTF-8を出力するには — Yuumi Yoshida <yuumi3@...>

おつかれさまです、 Yuumi3です。

11 messages 2008/08/08

[ruby-list:45349] WEBrick::CGI::Socket#eof?

From: "Hiroyuki Iwatsuki" <don@...>
Date: 2008-08-13 09:57:48 UTC
List: ruby-list #45349
岩月と申します。

webrick/cgiを使ったアップロードCGIをmswin32版Ruby 1.8.7で動かした際、
以下の例外が発生しました(Apacheのログから抜粋しました)。

NoMethodError: undefined method `eof?' for #<WEBrick::CGI::Socket:0x26b6758>
	G:/private/tools/ruby-1.8/lib/ruby/1.8/webrick/httprequest.rb:287:in
`read_body'
	G:/private/tools/ruby-1.8/lib/ruby/1.8/webrick/httprequest.rb:126:in `body'
	G:/private/tools/ruby-1.8/lib/ruby/1.8/webrick/httprequest.rb:173:in `fixup'
	G:/private/tools/ruby-1.8/lib/ruby/1.8/webrick/cgi.rb:84:in `start'
	D:/home/don/public_html/ruby/webrick/cgi/upload.cgi:34

たしかにWEBrick::CGI::Socket#eof?は未定義なのですが、
同じスクリプトをFreeBSD上のRuby 1.8.6で動かしたところ正常に動作しました。
何か違いがあるのでしょうか?

また、試しにWEBrick::CGI::Socket#eof?を書こうと思ったのですが、
どのように書いて良いのか分かりませんでした。

mswin32版はartonさんの ActiveRuby-1.8.7-p22-with-winsock2 です。
FreeBSD版はportsでインストールしたものです。
バージョンを揃えられなくてすみません。

ruby 1.8.7 (2008-06-20 patchlevel 22) [i386-mswin32]
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd6]

動作確認に使ったスクリプトやHTMLなども添付しました。

よろしければどなたかご確認いただけませんでしょうか。
よろしくお願いいたします。


IWATSUKI Hiroyuki <URL:mailto:don@na.rim.or.jp>

Attachments (2)

upload.cgi (772 Bytes, text/x-cgi)
#!G:/private/tools/ruby-1.8/bin/ruby -Ku
require 'erb'
require 'pstore'
require 'webrick/cgi'
require 'webrick/httpstatus'

class MyCGI < WEBrick::CGI
  include ERB::Util

  def do_GET(req, res)
    data = nil
    File.open('data', 'rb') do |f|
      f.flock(File::LOCK_SH)
      data = Marshal.load(f)
    end
    res['content-type'] = 'text/html; charset=utf-8'
    res.body = ERB.new(File.read('upload.html.erb'), nil, '-').result(binding)
  end

  def do_POST(req, res)
    data = {}
    req.query.each do |k, v|
      data[k] = v
    end
    File.open('data', 'wb', 0600) do |f|
      f.flock(File::LOCK_EX)
      Marshal.dump(data, f)
    end
    res.set_redirect(WEBrick::HTTPStatus::Found, 'upload.cgi')
  end
end

MyCGI.new.start
upload.html.erb (322 Bytes, text/html)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>result</title>
</head>
<body>
<table>
<tbody>
<%- data.each do |k, v| -%>
<tr><th><%= h(k) %></th><td><%= h(v) %></td></tr>
<%- end -%>
</tbody>
</table>
<p><a href="upload.html">[upload.html]</a></p>
</body>
</html>

In This Thread

Prev Next