やっとdjangoまで通りました・・・

さくらの制限とdjango.cgiの修正で時間がかかりました。orz
今まで見てきたBlogエントリをあわせれば、だいたいできるはずなのに・・・

一番悩んだのは、何故か「Options +ExecCGI」が効かなかったこと。
・・・これは、さくらの制限なんですね。うむむむ・・・
そして、スクリプトエラーまでたどり着きましたが・・・ここではまったのは、スペルミス!

os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'

としなければいけないところを、

os.environ['DJANGO_SETTINGS_MODULe'] = 'project_name.settings'

なんて書いていて、しばらく悩みましたよ。orz

さて、そんなアホなことで悩まなければ意外とすんなりいけるんです。
まずは、PYTHONPATHの追加。これはスクリプトに書いてしまいます。

sys.path.append('/home/username/local/lib/python')

これでいい。。。そう思ったのですが・・・
なんと!MySQLdbがこれではNGらしいのです。
サイトパッケージ扱いにしないといけない(?)みたいなので・・・

import site
site.addsitedir('/home/username/local/lib/python')

こうします。
参考:さくらサーバでdjango.cgi - tino_9000の日記

更に!何故か、「PATH_INFOが無いよ!」と言われてしまうので、run_with_cgiメソッドの中に↓こんな記述が必要みたいです。

    environ['PATH_INFO'] = environ.get('PATH_INFO',"/")

参考:解決!XREAでCGI版Pythonを使ってdjangoを動かす(人柱?) | 元LinuxなWEBデザイナーだった現PHPプログラマーの覚書き。
つまり、run_with_cgiメソッドが

def run_with_cgi(application):
    environ                      = dict(os.environ.items())
    environ['PATH_INFO'] = environ.get('PATH_INFO',"/")
    environ['wsgi.input']        = sys.stdin
    environ['wsgi.errors']       = sys.stderr
    environ['wsgi.version']      = (1,0)
    environ['wsgi.multithread']  = False
    environ['wsgi.multiprocess'] = True
    environ['wsgi.run_once']     = True

こんな始まり方になっていればOKです。

まとめてしまうと、意外とあっさりといったように見えますが・・・
結構苦労してるんですよ。まじで。。。アホばっかりやってて。orz

そうそう。Rewriteの設定ですが

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^MyamyuApps/(.*)$ /django.cgi/$1 [QSA,L]

こんな感じでやっています。
ようやく・・・チュートリアル2に進めます。。。

MiCHiLU Labs.