[Apache]CGIをWindowsで実行する時の問題
2009.01.22 |Category …Apache
ふへー。
あまり仕事とも関係ないんだけどものすごっく久しぶりにCGI(PERL)を触りまわしたわ。
ぐだぐだなので先に結論を。
Windows版でPerlってんでActive Perlを使ったけどCGIにおけるパスって
#!
行にあるところにperl.exeがあれば良いみたい。
DLLその他はActiveXコンポーネント(とか、.netとか)で実行ファイルのディレクトリからでも呼び出せるみたい。
Windows版Apacheがどういう風に実行ファイルをロードしてるかわからないけど、とりあえずApacheが存在しているドライブルートからの絶対パスを記述すれば動いてくれるっぽい。
実動作環境はDドライブにApacheを乗せてC:\Program Files\配下にActivePerlをインストールして渡されたソースのパスが /usr/local/bin/perl だったのでD:\usr\local\bin\ ディレクトリを作り、perl.exeだけコピーしてあげたら以外に普通に動いた。ライブラリがActiveXなんだろうか?
まぁ、とりあえずWindowsでUnixファイルシステムで動いてるCGIを動かすときの覚書です。
愚痴
↓
「この.cgiファイルのここを修正してほしい」って言われて手伝って見ようとおもったもののWindows環境しかないし実際の動作環境はUNIXだし。
システムコールは使ってないからWindowsでもActivePerlを入れればデバッグができる、と言われて渡されたソースファイル群・・・
ルートディレクトリにReadMe.txtがあって読んでみるとそこの環境の共通テンプレートが始めに書いてありました。
・各実行モジュールは環境に合わせてパスを設定しなおせ。
・sendmail,nkfなどその他の実行モジュールはソースファイル内にベタで書いてあるから各自全パス通してから実運用せよ
要約するとそんな感じだ。
ベンダーごとに微妙に配置ディレクトリが違う事への対処、だそうだ。
つか、これを書いた奴に言いたいのだが、配置ディレクトリが違ったとしても全体でシンボリックリンクのパスを統一すればいいだけじゃねーのか?(UNIX系の場合)
そこの環境は拡張子に合わせてパスを切りなおす個別配置ツールみたいなもの、各サーバに対してパスを手入力してソースがあるディレクトリからごそっと送るツールを使ってるらしいんだがやり方はいくらでもあるんじゃねーの?
とか思いながら、自分のXP端末にソースをコピーしてApacheでパスを切って、ActivePerlをインストールして、とやってみました。
Windows.txtってのがあったが無視。いざ実行してみようとしたらふと気づく。
Windowsの場合、パスはどうなってるんだろう?
ApacheでCGIとして動かす以上(HTTPDを通さないと動作確認できなかい仕組みだったのです・・・)Apacheからperl.exeを呼ばなくてはいけない。
しかし、.pl含めて1000個を超えるperlのファイルで作った人間たちが何がどう呼ばれてるかわからないものと戦うのはイヤだ!
という事で話を振った本人(別の事業所)に質問。
すると帰ってきた答えは
「だって開発用のサーバでしか動かしたこと無いもん」
おいおい。実本番環境は一発勝負かよ。まぁ、ツール的な役割だからそれもありうるのかもな、でも1000を超えるファイル数はねえよな。
というわけで、最初はあたりをつけながらパスをWindowsに書き換えながら、書き換えたあとできっと前述のツールがパスを置換してくれるんだろうな、とか思いながら作業をしてみました。
しかし。
トップ画面を表示するのにライブラリがライブラリを呼び、最低30個は編集しないことがわかった、というか力尽きた。
他になんか方法は無いものか、と・・・・
結論↑へ。
あまり仕事とも関係ないんだけどものすごっく久しぶりにCGI(PERL)を触りまわしたわ。
ぐだぐだなので先に結論を。
Windows版でPerlってんでActive Perlを使ったけどCGIにおけるパスって
#!
行にあるところにperl.exeがあれば良いみたい。
DLLその他はActiveXコンポーネント(とか、.netとか)で実行ファイルのディレクトリからでも呼び出せるみたい。
Windows版Apacheがどういう風に実行ファイルをロードしてるかわからないけど、とりあえずApacheが存在しているドライブルートからの絶対パスを記述すれば動いてくれるっぽい。
実動作環境はDドライブにApacheを乗せてC:\Program Files\配下にActivePerlをインストールして渡されたソースのパスが /usr/local/bin/perl だったのでD:\usr\local\bin\ ディレクトリを作り、perl.exeだけコピーしてあげたら以外に普通に動いた。ライブラリがActiveXなんだろうか?
まぁ、とりあえずWindowsでUnixファイルシステムで動いてるCGIを動かすときの覚書です。
愚痴
↓
「この.cgiファイルのここを修正してほしい」って言われて手伝って見ようとおもったもののWindows環境しかないし実際の動作環境はUNIXだし。
システムコールは使ってないからWindowsでもActivePerlを入れればデバッグができる、と言われて渡されたソースファイル群・・・
ルートディレクトリにReadMe.txtがあって読んでみるとそこの環境の共通テンプレートが始めに書いてありました。
・各実行モジュールは環境に合わせてパスを設定しなおせ。
・sendmail,nkfなどその他の実行モジュールはソースファイル内にベタで書いてあるから各自全パス通してから実運用せよ
要約するとそんな感じだ。
ベンダーごとに微妙に配置ディレクトリが違う事への対処、だそうだ。
つか、これを書いた奴に言いたいのだが、配置ディレクトリが違ったとしても全体でシンボリックリンクのパスを統一すればいいだけじゃねーのか?(UNIX系の場合)
そこの環境は拡張子に合わせてパスを切りなおす個別配置ツールみたいなもの、各サーバに対してパスを手入力してソースがあるディレクトリからごそっと送るツールを使ってるらしいんだがやり方はいくらでもあるんじゃねーの?
とか思いながら、自分のXP端末にソースをコピーしてApacheでパスを切って、ActivePerlをインストールして、とやってみました。
Windows.txtってのがあったが無視。いざ実行してみようとしたらふと気づく。
Windowsの場合、パスはどうなってるんだろう?
ApacheでCGIとして動かす以上(HTTPDを通さないと動作確認できなかい仕組みだったのです・・・)Apacheからperl.exeを呼ばなくてはいけない。
しかし、.pl含めて1000個を超えるperlのファイルで作った人間たちが何がどう呼ばれてるかわからないものと戦うのはイヤだ!
という事で話を振った本人(別の事業所)に質問。
すると帰ってきた答えは
「だって開発用のサーバでしか動かしたこと無いもん」
おいおい。実本番環境は一発勝負かよ。まぁ、ツール的な役割だからそれもありうるのかもな、でも1000を超えるファイル数はねえよな。
というわけで、最初はあたりをつけながらパスをWindowsに書き換えながら、書き換えたあとできっと前述のツールがパスを置換してくれるんだろうな、とか思いながら作業をしてみました。
しかし。
トップ画面を表示するのにライブラリがライブラリを呼び、最低30個は編集しないことがわかった、というか力尽きた。
他になんか方法は無いものか、と・・・・
結論↑へ。
PR
●Thanks Comments
●この記事にコメントする
●この記事へのトラックバック
TrackbackURL: