2010年1月12日火曜日

CORESERVER+Django:Script error に嵌ったぁ

 CORESERVER の CORE-MINI に登録して Django のデプロイに挑戦。
 基本的にはこちらこちらのページを見ながら virtual-python を入れて ez_setup を入れてと進み、Django と pysqlite をインストール。デバッグ情報出すために .htaccess に
AddHandler cgi-script-debug .cgid
AddHandler cgi-script .cgi
と cgid を追加。

 2010-03-02 追加:xrea では上の2行は特に必要ない模様。CORE SERVER では未確認。

 

あれこれやって簡単な Django アプリケーションが何とかそれっぽい HTML を吐くようになったのだが
Script Error
The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.
がでてどうしても先に進めない。

 xrea のサポートにログを送ったが、
大変申し訳ございませんが、弊社ではユーザー様ご利用スクリプトの動作保証は行っておりません。
そのため、上手く動作しない、あるいは、動作していたものが動作しなくなったという場合であっても、サポートすることができません。(以下略)
 とにべも無い。ま、安いからねぇ、当然といえば当然。

 google で色々検索して調べると、皆さん苦労しているようだが、どうもピンとくるページが見つからない。個別の状況に対する解はそれなりにあるのだが、このエラーがなぜ出てくるのかがわからない。
 単にテキストだけとか、単純な HTML を吐く cgi を実行させてもこのエラーが出る。nph CGI を使ってエラーチェックをスルーしてもブラウザがうまく表示できない。もうナニがナンだか。

 仕方なくエラーメッセージを読み直す(^^;。
The script did not produce proper HTTP headers.
え、HTML ヘッダじゃなくて HTTP ヘッダがおかしい? HTTP ヘッダーってなに?ログをよく見てみると、
argv[0] = ’cgiwrapd’
Executing ’/virtual/xxxx/public_html/django.cgi’
Output of script follows:
=====================================================
run linux server parametera
Status: 200 OK
Vary: Cookie
Content-Type: text/html; charset=utf-8

<;DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
 一行目になんだか変なのが入っている。

 調べてみると、確かに最初の一行目は HTTP header として成立していない。どうやら Django の吐いたメッセージが html に紛れ込んだっぽい。
 それではと、django.cgi のコードから Django 本体のコードを追うと、ミドルウェアを読み込んだときのメッセージのようだ。Django のコードを手直ししようとしたが、メッセージを吐く部分が見つからず、結局 django.cgi に手をいれ、ダミーの http header にしてしまった (^^;

 django.cgi の変更部分
sys.stdout.write('X-DUMMY: ') # この行を追加
result = application(environ, start_response)
try:
 cgi の出力は、
argv[0] = 'cgiwrapd'
Executing '/virtual/officer/public_html/django.cgid'
Output of script follows:
=====================================================
X-DUMMY: run linux server parametera
Status: 404 NOT FOUND
Content-Type: text/html
 これで Script error は出なくなった。

 Script error を超えるだけで二日かかってしまった。サーバーの無料お試し期限は 1/15 までなんだが、それまでに本番のアプリケーションを fastcgi で動かせるのか?
 

0 件のコメント:

コメントを投稿