このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

acgiにするとうまくいかないのですが。

発言者:岸本康二
( Date Friday, October 10, 1997 01:52:00 )


掲示板のCGIを作っているのですが、
ACGIからの実行結果の受信に誤りが起きました(-1700)
というエラーが返ってくるので、ハンドラを外して
try --- on error も外して間違いを探そうとしたのですが、
これだとエラーもなくうまくいってしまい、途方に暮れています。
両者の大きな違いはできたページのreplyの有無と、
最初に行うフォームの処理部分だけです。
フォームの処理部分も調べたのですが、setで設定するのと
変わりないようです。
何がいけないのでしょうか?どなたかお教え下さい。
よろしくお願いします。

田中求之 さんからのコメント
( Friday, October 10, 1997 12:13:20 )

>両者の大きな違いはできたページのreplyの有無と

これはどういうことですか?

岸本康二 さんからのコメント
( Friday, October 10, 1997 13:47:33 )

目を通していただき、ありがとうございます。
両者ともファイルに書き込みはしているのですが、
片方はon ヌevent WWWスsdocネ path_args givenを外したので
"HTTP/1.0 200 OK" & crlf & 
"Server: MacHTTP" & crlf & "MIME-Version: 1.0" & crlf &
"Content-type: text/html" & crlf & crlf
のヘッダを使った実行結果の返信はしないという意味の
つもりだったのですが、言葉足らずだったようです。
すみません。
1日考えてみたのですが、やっぱり
set fDat to ACME parse args post_args
として受け取ったリストが、自分の思っているものと
違うのでしょうか?

田中求之 さんからのコメント
( Friday, October 10, 1997 17:10:00 )

>片方はon ヌevent WWWスsdocネ path_args givenを外したので

ということは、CGI としては動きませんよ? ACGI として呼び出されて実行される
ためには、

1:かならず ヌevent WWWスsdocネ ハンドラーがあり、このハンドラーが処理を
行う

2:実行後は必ずサーバーに対して reply (HTTP ヘッダー付のページを)する

という条件を満たす必要があります。この条件を満たしてなければ、エラーが出ます。

岸本康二 さんからのコメント
( Friday, October 10, 1997 21:54:26 )

すみません。
2つあるというのは、
まず最初に完全なCGIを目指して書いたものが1つで、
もう1つというのは、そのCGIを試してみるとエラーがでるので
デバッグを簡単にするために ヌevent WWWスsdocネ ハンドラーを外して
(でないといちいちアプリケーションにしないといけないので)
フォームデータの取得とページのreplyの部分のみを除いたものです。
(フォームデータは前もって用意したリストで代用しました)
後者は問題なく動くのですが、前者のCGIになるとエラーが返ってくるんです。
フォームページの取得の部分に関しても調べてみたのですが、
別段問題が有るようには思えません。(と信じているのですが)

ついでに、アプリケーションにせずに ヌevent WWWスsdocネ ハンドラを
入れたままデバックする方法は有るのでしょうか?
もしあればぜひ教えてください。

田中求之 さんからのコメント
( Saturday, October 11, 1997 01:12:38 )

そういうことでしたか。

とすれば、やはりエラーの原因と思われるのは、post_args の処理の部分(FORM から
のデータの解析部分)でしょうね。

ACME parse args は久しく使っていないのですが、デコードの結果は、

{{項目名, データ}, {項目名, データ}, ....}

というリストの入れ子の形になっています。ですから、データ部分を取り出すには、

item 2 of item x of ....

というふうに、かならず item 2 を付けるのを忘れないでください。


>ついでに、アプリケーションにせずに ヌevent WWWスsdocネ ハンドラを
>入れたままデバックする方法は有るのでしょうか?

Script Debugger や Scripter という市販のエディタを使うと、CGI のハンドラ
を trace や step  で追い掛けることは可能です。

もっとも実際は面倒ですので(どとらの製品もユーザーですので、試したことはあります)、
私は、サーバーから送られてくるのと同じメッセージを自分で組み立てて、デバッグして
ますけど。

ヌevent WWWスsdocネ "" given ヌclass postネ:"name=%93c%92%86%8B%81%94V"

てなのを、ヌevent WWWスsdocネ ハンドラーの手前に書いておいて Run するわけです。

岸本康二 さんからのコメント
( Saturday, October 11, 1997 20:19:27 )

間違いを見つけました。
やはりpost_args の処理の部分に
(というか、フォームのページの方に)間違いがありました。
けっこう僕にとっては落とし穴でした。
いろいろ教えていただいてありがとうございました。
これからも宜しくお願いいたします。