たむらです。
GOTOU Yuuzou <gotoyuzo@notwork.org> wrote:
> In message <200203121658.g2CGwdHC002319@mail532.nifty.com>,
> `"TAMURA.KENICHI" <sgs02516@nifty.com>' wrote:
> > # 2. の『httpd.rb の PATH ...』良く意味が判りませんでした。
>
> 親プロセスの ENV["PATH"] を渡す、と言うつもりでした。
あ。な〜る (^^;
> > > wwwsrv は、CGI を動かすためのインタプリタを選べるように
> > > なってるんですね。
> >
> > さっきテストしてみたら、
> > perl_cgi = WWWsrv::CGIdocument::new("./", false,'perl')
> > SERVER.mount(perl_cgi, '/', /\.cgi$/)
> >
> > な設定でも、shbang 関係なしで動きますね。
> > # 拡張子.cgi で Ruby なスクリプトも動作しました。
>
> Perl や Ruby が shebang を解釈するからですね。
これは、 shbang 書いてないのにってことなんですよ。
不思議。
# 最初そうだろうと思って、消してみたけど動いたんです。
> > > のようにして、インタプリタを指定できるようにしてみました。
> > > (nil の場合は、従来通りに exec します。)
> > > Windows ではまだ動かしていないので、もしよければ試しても
> > > らえないでしょうか。
> >
> > 以下のスクリプトで試してみました。一応 /usr/bin/ruby を
> > シンボリックリンクで作って試したりしてみました。
>
> > # :CGIInterpreter => '/usr/bin/perl' # 1
> > :CGIInterpreter => '/usr/bin/ruby' # 2
> > # :CGIInterpreter => '/usr/local/bin/ruby' # 3
>
> > 結果的には、1 の perl(笑 だけ動作します。pnamazu.cgi も正常に動きました。
>
> うぐ、なんでだろ。
2,3 ともに、 cygwin1.dll が PATH に無いってメッセージですね。
この時システムで設定してある C:\Windows\system32 だとかには存在し
ないと表示されるので、 PATH が全てクリアされるわけではないみたいで
す。まぁ、 cygpath 的じゃないので意味ないですが。
# cygpath とは、 cygwin 的に mount された '/usr/bin' とか
# '/cygdrive/c/windows'とかを指します。
> > セキュリティとのトレードオフになりますが、Cygwin に関しては、子プロセスの
> > クリアをしないという引数を作っていただくか、 RUBY_PLATFORM で判断
> > して、'/usr/bin' のみ PATH 設定してやるというのが、一番現実的な気
> > がしますです。
>
> RUBY_PLATFORM での場合わけよりも、
>
> :CGIPathEnv => "/usr/bin"
>
> という感じで指定できるのが楽でよいです。クリアしないのと
> 同等のことがしたければ、ENV['PATH'] をそのまま渡せば済み
> そうですし。
>
> :CGIPathEnv という名前が変でなければ追加します。
私に依存はありません。もしかすると PATH 以外でも渡した方が良い環境
変数とかあったりしないかな ?
tDiary はじめました。 http://tamura.tdiary.net
たむら mailto:sgs02516@nifty.com