よたらぼ
自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

April 30, 2005 [おもひで]

[Ruby] exec() on Win32

One Click Installerの最新版でWEBrickのCGIHandlerがうまく動かない。

#WEBrickをWindowsから使う、ってそもそも初めてだから何が正しいのかよくわからないんだけど(^^;)。

webrick/httpservlet/cgi_runner.rbのexec()がダメみたいなんだよなぁ。

exec()自体をテストしてもやっぱりうまく動かないや。

test.rb
---------
p "test"
---------
 
test2.rb
---------
exec 'test.rb'
---------
C:\temp> test2.rb 
C:/temp/test2.rb:1:in `exec': Exec format error - test.rb

拡張子.rbはruby.exeに関連づけられてるんだけど、execだとダメってことなのかな。ちなみに以下のようにすれば動くみたい。

test2.rb
---------
exec 'ruby test.rb'
---------
C:\temp> test2.rb 
"test"

1行目に#!c:\ruby\bin\ruby.exeとかつけてもダメだ。

実際は、拡張子.cgiをrubyに関連づけて動かそうと思ってたんだけど、どうもその前段階の問題のような....。関連づけだとダメなのかな。 まぁ、いずれにせよ、今日はここまで。疲れたからもう寝よ。

本日のツッコミ(全4件) [ツッコミを入れる]
なかだ (May 01, 2005 09:45)

CGIの扱いなら関連づけじゃなくてHTTPサーバの設定じゃないでしょうか。
関連づけに関しては、CreateProcess()自体では扱ってくれないようなので、
HKEY_CLASSES_ROOTから情報を引っ張ってきてコマンドラインの解析やらが必要になると思います。

むとう (May 01, 2005 16:17)

HTTPサーバということはこの場合はWEBrick(で簡易httpサーバを作っています)になるわけですが、その行き着く先がwebrick/httpservlet/cgi_runner.rbのexec()でのエラーなんですよね...。
CreateProcess()って関連づけは使えないんですね。なるほど...。

IKeJI (November 07, 2005 10:16)

亀レスすみません。検索してきました。

同じ問題にぶちあたりました。
とりあえず、cgi_runner.rbの最後の行を
exec "ruby " + ENV["SCRIPT_FILENAME"]
と、Rubyを起動するようにして対処。
これだと、Ruby以外で書かれたCGIは動作しないので、
CGIをRubyに関連付けして、
exec "start " + ENV["SCRIPT_FILENAME"]
とした方が良いかもしれません。

むとう (November 08, 2005 01:49)

"start" ってのがあるんですね。
お恥ずかしながら知りませんでした。


編集