2008年2月13日

[ruby-list:44623] CGIからCのプログラムを実行する <再送

はじめまして、Hiraiと申します。
(先ほどメールで改行などが崩れてしまいましたので、再送いたします。すみま
せん・・・)

rubyのCGIからCのプログラムを実行して結果を取得するため、以下のように
popenを使って、別プログラムへの入出力を取得しています。しかし、 2度目以
降のアクセスがくると下記のようなエラーが発生してしまいます。(参照:[表
示されるエラー])

アクセスのたびに別プログラムを起動するようにすれば、このエラーは発生しな
いと思うのですが、別のプログラムが非常に大きなデータをロードするため、ア
クセスがあるたびにロードすることは避けたいのです。
1度だけのpopenで取得できた入出力のオブジェクトを、2度目以降のアクセスの
たびに再オープンして使いまわすことはできないのでしょうか?

==========[表示されるエラー]============
http://192.168.36.188:2000/parse -> /parse
[2008-02-13 22:12:53] ERROR IOError: not opened for writing
test_web.rb:17:in `write'
test_web.rb:17:in `puts'
test_web.rb:17:in `do_POST'
/usr/lib/ruby/1.8/webrick/httpservlet/abstract.rb:35:in `__send__'
/usr/lib/ruby/1.8/webrick/httpservlet/abstract.rb:35:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
/usr/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
/usr/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
/usr/lib/ruby/1.8/webrick/server.rb:95:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `each'
/usr/lib/ruby/1.8/webrick/server.rb:92:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:23:in `start'
/usr/lib/ruby/1.8/webrick/server.rb:82:in `start'
test_web.rb:31
idc-dev01.rozettaidc.local - - [13/Feb/2008:22:12:53 JST] "POST /parse
HTTP/1.1" 500 307

======[ソースコード]================

#!/usr/bin/ruby
require 'webrick'

include WEBrick

s = HTTPServer.new(
:Port => 2000,
:DocumentRoot => Dir::pwd
)

$io = IO.popen("code/parser ./examples/sec00.tagged
models/model1/grammar 10000 1 1 1 1", "w+")

class ParseServlet < HTTPServlet::AbstractServlet

def do_POST(req, res)
i = req.query['input']
$io.puts i

$io.close_write

s_tmp = ""
while s = $io.gets
s_tmp = "#{s_tmp}\n#{s}"
end
res.body = "#{s_tmp}"
res['Content-Type'] = "text/plain"
end
end
s.mount("/parse", ParseServlet)
trap("INT") { s.shutdown }
s.start

投稿者 xml-rpc : 2008年2月13日 22:42
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/69701
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。