読者です 読者をやめる 読者になる 読者になる

cloverrose's blog

Python, Machine learning, Emacs, CI/CD, Webアプリなど

Djangoのデプロイへの道7 adminサイトを表示するためにAlias

Django Apache

問題点

5回、6回と終わってやった!って気になってが、w3mによるテキストベースの確認だから問題を発見できていないだけであった。

その問題とは、http://localhost:8000/admin/にアクセスするとpython manage.py runserverで動かしたときと違い、なんかCSSやら画像やらがロードできていなかった。

解決策

/etc/apache2/httpd.confに以下を追加

Alias /static/admin/ /usr/lib/python2.7/dist-packages/django/contrib/admin/media/

解決策を見つけるまで

http://localhost/admin/にアクセスしてブラウザの機能を使って、ソースコードを表示っていうのをする。
そうすると、テンプレートの穴埋めが行われた/usr/lib/python2.7/dist-packages/django/contrib/admin/templates/admin/index.html
を見ることができる。そこで、.cssを検索して/static/admin/css/base.cssなどをロードしようとしていることが分かった。
そして、http://localhost/static/admin/css/base.cssへアクセスすると、NotFoundとなることを確認し、問題はCSSをロードできていないことであると再確認する。

そして、この/static/adminは~/mysite/settings.pyでADMIN_MEDIA_PREFIXで設定した値だ!と思い、ADMIN_MEDIA_PREFIXの役割を理解し、結局Aliasを貼ればいいんだ!ってわかった。

解決策にたどり着くまでの苦労

結局解決には至らなかったが行ったことを、いじったファイル別にまとめてみた。

django.wsgi

また、PYTHONPATHが関連しているのでは?と思い
http://hain.jp/index.php/tech-j/2008/01/21/PYTHONPATHを見ながら、
~/mysite/apache2/django.wsgiにsys.path.append(ほげほげ)をいろいろ書いて実験した。

settings.py urls.py

ADMIN_MEDIA_PREFIXってなんぞ?って思って
http://ggutter.blogspot.jp/2009/06/adminmediaprefix-mediaroot.html
http://d.hatena.ne.jp/jbking/20060308/p1を見て次をいじった。
~/mysite/settings.py
~/mysite/urls.py

ソースコード

python manage.py runserverとの違いを検証すべく以下を読んだ。
manage.py
/usr/lib/python2.7/dist-packages/django/core
/usr/lib/python2.7/dist-packages/django/core/management/commands/runserver.py
/usr/lib/python2.7/dist-packages/django/core/servers/basehttp.pyx

しかし、CSSのロードは起動時ではなく、ページアクセス時に行われるので意味が無いことに気づき中止。

httpd.confを変更したらapacheの再起動が必要

$ sudo apachectl restart

http://www.kishiro.com/apache/start_stop.html