CGIを動かす[日々是ことば拾い]

[Written by ]
Webサーバが動いたらCGIが動くようにするわけですが、まずはPerlスクリプトとして動かないとだめなんですが…
[b,ライブラリがない]
Perlをパッケージインストールした場合、Perl(Unix)とかActivePerl(Win)を使うときに普通に使えるライブラリ(例えば「Time::Local」とか…いや、Watsで使っているので…)が入っていない。
まあ、リナザウの空き容量考えたら仕方ないけど…ということで、使うCGIで
use Time::Local
とか書かれた行がある場合、どこかから(僕は母艦に入れていたActivePerlから)コピーする必要があります。

[b,改行コードが\r\nだとだめ]
viとかでCGIファイルを開いた時に「^M」とかいう文字が行末ごとに並んでいる場合、これを取り除かないと動きません

といった辺りに注意して、必要ならば修正します。
で、ターミナルから実行した時ちゃんと動作するか確認しましょう(CGIによってはコマンドラインからは動作しないものもあるけど)。

ただ、ターミナルから実行した場合、最初に
LANGUAGE=(unset)
LC_ALL=(unset)
とかなんとかっていうエラーが最初に出ているけど、とりあえず無視してOKっぽい。
気になる人は
---start---
# export LANG=C
---end---
とコマンド実行した後でPerlを実行すれば、出ないはず。

さて、この時点で動かない場合はPerlの問題なのでいろいろ調べて動くようにしてください。
CGIによっては元々ターミナルから動かないものもありますが…その辺の細かい部分は省略(笑)

さて、ターミナルから動作するのですが、このままboaのCGIでブラウザから動かすと500番エラーがでます。これは、
[b,パスの記述はすべて絶対パスにする]
CGIプログラム内のパス指定をすべて絶対パスにする必要があります。
ただし、これは変数を使って指定してもOKですので
$Dir="/usr/mnt.rom/card/html";
$file="$Dir/file.txt";
のような指定でもOKです。

[b,モジュールの読みこみディレクトリ設定が必要]
先ほどコピーしたモジュールですが、CGIプログラムと同じディレクトリに置いていたとしても、boaから実行する場合読みこみを行いません。
そこで、CGIプログラムのuse行の前に
use lib qw(モジュールの置いてあるパス);
を追記してください。ちなみにいくつかのCGIファイルに分割していた場合はすべてファイルに書いて置く必要がありますし、ここのパスは変数を使って指定できないようです。

さて、この辺を修正すれば(多分)CGIが動くようになるはずです。

[追記]
boaでCGIを動かしたときには環境変数PATH_INFOを返さないようです。
#これでTrackBack系の処理は全滅っぽいですね
多分、一部の環境変数は返さないようなので、サーバの環境変数を使っているCGIは注意してください。
tags:
[2003-03-13 22:39:55]


Comment


(このNoteは書き込みから約半年以上経過したためコメントFormを非表示しています)

Zenback