データベースファイルが読めない問題
Apache2+mod_pythonで、Djangoアプリを動かすまでの遠い道のり。
Macでは暫定的に、バックエンドデータベースとしてsqlite3を使うことにする。そうすると、あるページにアクセスすると、
OperationlError: unable to open database file
となってしまう。
http://php-sql-gdgd.jugem.jp/?eid=60 ←ここを参考に、settings.pyの中で、DATABASE_NAMEの設定を書き変える。
#DATABASE_NAME = 'mysitedb' # old DATABASE_NAME = os.path.join(os.path.dirname(__file__), "mysitedb") # new
これで再びアクセスする。今度は、
DatabaseError: attempt to write a readonly database
となる。でも何回かリロードを試すと、また
OperationlError: unable to open database file
となった。よく分からない。挙動が一貫しないのだが。
http://d.hatena.ne.jp/kuma8/20070504/1178299912 ←今度はここを参考に、mysitedbファイルを置いてあるディレクトリに他人の書き込み権限を与える。これでOK。データベースが開けないということはなくなった。が、今度は、
Forbidden (403) CSRF verification failed. Request aborted.
になった。しかも、DEBUG=Falseなのに、Djangoのデバッグ画面が表示されているし...。何か壊れたか、壊れているか?そこで、Macをrebootしたら、「500 Internal server error」で完全に動かなくなった...。
CSRFの警告は、データベースファイルを作り直したり、settings.pyに、
MIDDLEWARE_CLASSES = ( ... 'django.contrib.csrf.middleware.CsrfMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', ... )
を加えて試しているうちに出なくなった。
(追記)「500 Internal server error」の原因が分かった。ユーザー_wwwの書き込み権限がないところにファイルを作ろうとしていた...。apacheのエラーログ(/opt/local/apache2/logs/error_log)を見たら、そのように書いてあった。