自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。
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に関連づけて動かそうと思ってたんだけど、どうもその前段階の問題のような....。関連づけだとダメなのかな。 まぁ、いずれにせよ、今日はここまで。疲れたからもう寝よ。

CGIの扱いなら関連づけじゃなくてHTTPサーバの設定じゃないでしょうか。
関連づけに関しては、CreateProcess()自体では扱ってくれないようなので、
HKEY_CLASSES_ROOTから情報を引っ張ってきてコマンドラインの解析やらが必要になると思います。
HTTPサーバということはこの場合はWEBrick(で簡易httpサーバを作っています)になるわけですが、その行き着く先がwebrick/httpservlet/cgi_runner.rbのexec()でのエラーなんですよね...。
CreateProcess()って関連づけは使えないんですね。なるほど...。
亀レスすみません。検索してきました。
同じ問題にぶちあたりました。
とりあえず、cgi_runner.rbの最後の行を
exec "ruby " + ENV["SCRIPT_FILENAME"]
と、Rubyを起動するようにして対処。
これだと、Ruby以外で書かれたCGIは動作しないので、
CGIをRubyに関連付けして、
exec "start " + ENV["SCRIPT_FILENAME"]
とした方が良いかもしれません。
"start" ってのがあるんですね。
お恥ずかしながら知りませんでした。