Warning: array_keys() expects parameter 1 to be array, object given in /export/sd09/www/jp/r/e/gmoserver/8/7/sd0135687/torokeru.tv/mameblog/wordpress-2.8.2-ja-undernavicontrol/wp-content/plugins/script-compressor/script-compressor.php on line 348

Warning: max(): When only one parameter is given, it must be an array in /export/sd09/www/jp/r/e/gmoserver/8/7/sd0135687/torokeru.tv/mameblog/wordpress-2.8.2-ja-undernavicontrol/wp-content/plugins/script-compressor/script-compressor.php on line 348
mod_wsgiいれてみた | まめも

mod_wsgiいれてみた


Djangoには簡易Webサーバーがついているけども、推奨はされていないらしい。
静的ファイル等の提供等もWebサーバーがやるべきだとか。まぁ、例えばHTMLのリンクで
<img src= ???>
なんてやった時にDjangoのWebサーバーの場合だと、FirefoxのFireMobileSimulatorや
某携帯からだと画像が表示されない事もあったので。(原因不明…)
なんにしろ、推奨していないというのであれば、apacheとDjangoの連携に挑戦してみたいと思います。
後、mod_pythonでやるとPOSTで日本語が化ける(というか壊れる)現象が起きたので、、、


まずはインストール

apt-get install libapache2-mod-wsgi


wsgiファイルの作成

Hello’worldの時に作成したDjangoプロジェクトをそのまま使用。
settings.pyと同階層に【handler.wsgi】というのを作成する。
実際の名前は【test.py】でも【handler.py】でも【wsgi.py】でも
名前は何でもいいっぽい。

handler.wsgi


#!/usr/bin/python
# -*- encoding: utf-8 -*-

import sys
import os

sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/..')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

中身はpython
アプリケーションにwsgiを使いますよーって事かと思う。(TODO:調べる)


apacheの設定

vi /etc/apache2/sites-avaiable/default
を指定。
sites-avaiableにはサイトの設定ファイルが置かれており、
デフォルトではdefaultが使用されている。
なので、もし新しいのを作成したい場合は
適当に1つファイルを作成し(仮にtestsiteとする)
a2dissite default
defaultを無効にし
a2ensite testsite
testsiteを有効にすることもできる。
とりあえず今の目的はmod_wsgiを動かすことなのでdefaultに追記する


<VirtualHost *:80>
   ~~~~~なんか色々設定ある~~~~~
    WSGIScriptAlias / /home/username/myproject/handler.wsgi
</VirtualHost>

さっき書いたhandler.wsgiを指定。

モジュールロード

【/etc/apache2/mods-avaiable】にwsgi.(load | conf)があるのを確認する。
loadの方を開くと
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so
と書かれているので、既に指定済み


確認

色々apacheのファイル触ったので再起動する。
service apache2 restart
で、サイトの方を確認すると、、、

Internal Server Error

!?
み、、、みれない
apacheのログを確認してみると

mod_wsgi (pid=1643) :Exception occurred processing WSGI script ‘home/username/myproject/handler.wsgi’

みたいなのが出てた。
読み込めてないのかなぁとか思いつつ、ぐーぐるさんで調べてみると文字コードが怪しい説が。
文字コードを見てみるとANSI・・・
UTF-8に変換し再アップしてapacheを再起動すると、さっきのエラーは解決したみたいだけど別のエラーが。

no module named myapp

むむむ、、、Djangoアプリケーションが見えていないのかなぁ、、
と思いdjangoでmyappを指定していた部分を全て
urls.py


urlpatterns = patterns('',
    (r'^top/$', 'myproject.myapp.views.main')
)

setttings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'myproject.myapp'

と言う[プロジェクト].[アプリケーション]という感じに変更。
再度apacheを再起動して
http://mysite.tv/top
にアクセスしてみると、、

Hello World!!

やっと出た、、、

No related posts.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <img localsrc="" alt="">