客先でのCGI の Internal Server Error を回避する


Perl の CGIプログラムをファイルとして納品してしまう場合に「Internal Server Error」をなるべく回避するための単純な方法を紹介します。

単純な話ですが、1行目の Perl パスに

#!/usr/bin/perl -w

のように「-w」(ワーニングオプション)を付けておくこと。

解説

動作確認して販売したCGIプログラムが「エラーが出てます。動きません。」と言う問合せの中で、「Internal Server Error」は原因情報が全く取得できないだけに、開発者としては厄介な部類に入る。

原因は以下のどれかなのだが、

・パーミッション
・改行コード
・モジュール不足
・Perl バージョンの想定違い
・文法エラー

このうち「改行コード」の問題はエディタなどでは目に見えない上、FTPの仕方によっては転送時に問題が消えてしまうので、「エーと、FTP にはテキストモードっていうのがありまして…」などと説明するのは中々面倒くさい。
また、お客様は「動かないじゃないか!」という不信感満々で問い合わせて来るので、原因切り分けのための状況確認も結構大変だ。

ということで、納品時に Perl のパスの末尾に「 -w」を追加しておくだけで、改行コードが「CR+LF」にされてしまってもエラーが出ない。(オプション前のスペースが正しい Perl のバスを保護してくれる。)

すばらしい。

ということで、いかがでしょうか?

ちなみに

  • オプション「-w」の後に「CR」がくっ付いても期待通りそのオプションとして認識されるようです。Perl って素敵。
  • パスの後に半角スペースだけ追加した場合は、期待通りにならないようです。(=改行コードが適合していないとエラーになる。)