表題通りですが、MacOSX Lion 上の MAMP で Python WSGI Web Application を動かす為のセットアップめもです。
ネットに色々と情報はあるのですが、画像とかを静的にアクセスするための情報などと一緒になったものは見当たらなかったので、ここにメモしておきます。なお、本記事は次のツールは準備済のお話です。
- MAMP(http ポートを80番に変更)
- Python
- Homebrew
では、まずは mod_wsgi をインストールします。
コンソールを立ち上げて Homebrew でインストールします。
超ー簡単です。
1 |
brew install mod_wsgi |
実行するとインストールログがツラツラと表示されますが、その中に、丁寧に以下のような説明まで書いてあります。このパスが mod_wsgi 本体っすね。探さなくと良いので、ちょっと嬉しい配慮です。
1 2 |
* You must manually edit /etc/apache2/httpd.conf to load /usr/local/Cellar/mod_wsgi/3.3/libexec/mod_wsgi.so |
上記の情報をもとに、httpd.conf に mod_wsgi を登録します。
僕的に httpd.conf には MAMP の modules のパスを記述したかったので、シンボリックリンクを作成しました。
1 |
ln -s /usr/local/Cellar/mod_wsgi/3.3/libexec/mod_wsgi.so /applications/mamp/library/modules/ |
それから MAMP の httpd.conf を変更します。
1 2 |
cd /applications/mamp/conf/apache vi httpd.conf |
次の行を追加。
1 |
LoadModule wsgi_module modules/mod_wsgi.so |
それから、wsgi アプリケーションのエントリポイントを WSGIScriptAlias で登録します。
僕の場合、MAMP でバーチャルホストしてるので以下のような記述になりました。
1 2 3 4 5 6 7 8 9 10 |
<VirtualHost *:80> DocumentRoot /Users/yuka2py/Projects/wsgi/public ServerName dev.wsgisample.jp Alias /robots.txt /Users/yuka2py/Projects/wsgi/public/robots.txt Alias /favicon.ico /Users/yuka2py/Projects/wsgi/public/favicon.ico Alias /style/ /Users/yuka2py/Projects/wsgi/public/style/ Alias /lib/ /Users/yuka2py/Projects/wsgi/public/lib/ Alias /media/ /Users/yuka2py/Projects/wsgi/public/media/ WSGIScriptAlias / /Users/yuka2py/Projects/wsgi/public/main.py </VirtualHost> |
WSGIScriptAlias が、wsgi アプリケーションのエントリポイントとなる Python スクリプトのパスです。ここでは、Alias で記述された項目を除いてルート以下の全てのリソースへのアクセスを /wsgi/public/main.py に送っています。
Alias の記述は、favicon や javascript、画像ファイルなどを静的に表示するためのおまじないです。ww
この記述が無いと、全てのリクエストは /wsgi/public/main.py に送られます。
ここでは、 /style/、/lib/、/media/ 以下の全てのファイルと、robots.txt、favicon.ico を、静的にアクセスできるように設定しています。
仕上げに、バーチャルホストの為に hosts にエントリを追加します。
1 |
sudo vi /etc/hosts |
1 |
127.0.0.1 dev.wsgisample.jp |
あとはアプリケーションをごにょごにょと準備します。
/wsgi/public/main.py
1 2 3 4 5 6 7 |
def application(environ, start_response): status = '200 OK' output = 'Hello World!' response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] |
以上です。
ブラウザで http://dev.wsgisample.jp/ へアクセスすると Hello World! が表示されます。
参考
- http://straitmouth.jp/blog/setomits/2259
- http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files