mod_wsgi で WSGI アプリケーションを動かす
Python 合宿で WSGI を多人数で気軽に動かす方法を聞かれたのですが、
mod_wsgi を使えばできると思って、やってみました。
mod_wsgi のインストール
手元のVM は Ubuntu なので、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 アプリケーション
# -*- 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