mod_wsgi で WSGI アプリケーションを動かす

Python 合宿で WSGI を多人数で気軽に動かす方法を聞かれたのですが、
mod_wsgi を使えばできると思って、やってみました。

mod_wsgi のインストール

手元のVMUbuntu なので、checkinstall でソースからインストールします。

 $ sudo aptitude install apache2-threaded-dev   # apxsを入れるため
 $ wget http://modwsgi.googlecode.com/files/mod_wsgi-2.0c4.tar.gz
 $ tar zxvf mod_wsgi-2.0c4.tar.gz
 $ cd mod_wsgi-2.0c4
 $ ./configure
 $ make
 $ sudo checkinstall
 $ sudo dpkg -i mod-wsgi_2.0c4-1_i386.deb

apache の設定

/etc/apache2/mods-available/wsgi を作成

 LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

/etc/apache2/mods-enabled からリンク

/etc/apach2/mods-enabled
 $ sudo ln -s ../mods-available/wsgi

apache の設定に追記

     WSGIScriptAlias /wsgi/ /usr/lib/wsgi/

apache の再起動

 $ sudo /etc/init.d/apache2 restart

WSGI アプリケーション

/usr/liib/wsgi/index.wsgi

# -*- coding: utf-8; mode:python -*-

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!\n'
    output += 'SCRIPT_NAME: %s\n' % environ['SCRIPT_NAME']
    output += 'PATH_INFO: %s\n' % environ['PATH_INFO']

    response_headers = [('Content-type', 'text/plain'),
                            ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

確認

URLにアクセスすると、見事に表示されました。
http://192.168.25.128/wsgi/abc/xyz/

Hello World!
SCRIPT_NAME: /wsgi
PATH_INFO: /abc/xyz/

/wsgi/ 以降のURLは、PATH_INFO として application に渡されています。

備考

  • WSGIアプリケーションの callable は、 application という名前で作成する規約になっています。
  • デフォルトでは、Python ファイルに変更があった場合、自動的に再コンパイルします。
  • ここに書いたような、インストール後の最小構成は source に入っているREADMEを参考にしました。
  • PYTHON_PATH を設定したい場合は、 WSGIPythonPath で設定すると読み込んでくれます。
WSGIPythonPath /home/junya/lib/python2.5/site-packages/   # virtualenv を使おう

Posted by id:junya_hayashi