Apache + mod_wsgiでBottleフレームワークのアプリケーションを動かす
Pythonの軽量Webフレームワーク「Bottle」について調べ中。Pythonの軽量Webフレームワーク「Bottle」
PythonのBottleフレームワークで静的ファイルのリンク生成
簡単なアプリケーションを作成し、Apache + mod_wsgiな環境で動かせるか試してみます。
サンプルアプリケーション
2ページ作成し、各々にお互いのリンクを作成しています。
mod_wsgiで動かすときによくはまるのが、リンクを作成するメソッドが、
ルートでの動作しか考えてない、要するに
http://www.example.com/
で動くことしか想定してなくて、
http://www.example.com/mod_wsgi/
みたいなリンクで動かそうとすると、リンクが正しく生成されなかったりします。
こんなサンプルにしました。
index.py
- # -*- coding:utf-8 -*-
- from bottle import route, run, view, static_file, url
- @route('/static/<filepath:path>', name='static_file')
- def static(filepath):
- return static_file(filepath, root="./static")
- @route('/', name="index")
- @view("index_template")
- def index():
- return dict(url=url)
- @route('/<name>/<count:int>', name="hello")
- @view("hello_template")
- def hello(name, count):
- return dict(name=name, count=count, url=url)
- if __name__ == '__main__':
- run(host='0.0.0.0', port=8080, debug=True, reloader=True)
index_template.tpl
helloへのリンクテスト<br />
<a href="{{url('hello', name="symfo", count=2)}}">hello</a><br />
<br />
<img src="{{url('static_file', filepath="image.jpg")}}">
hello_template.tpl
こんにちは。<b>{{name}}</b>さん。<br />
<br />
indexへのリンクテスト<br />
<a href="{{url('index')}}">hello</a><br />
<br />
{{count}}回ループするよ<br />
<br />
% for i in xrange(count):
{{i}}回<br />
% end
<img src="{{url('static_file', filepath="image.jpg")}}">
これを/opt/bottlesampleに配置。
http://www.example.com/bs/で公開してみます。
アダプターの作成
mod_wsgiから呼び出すためのアダプターを作成しました。
adapter.wsgi
- # -*- coding:utf-8 -*-
- import sys, os
- dirpath = os.path.dirname(os.path.abspath(__file__))
- sys.path.append(dirpath)
- os.chdir(dirpath)
- import bottle
- import index
- application = bottle.default_app()
最終的なディレクトリの構成は以下のようになっています。
mod_wsgiのインストール
手元にあったDebianの仮想サーバーで動作を確認することにしました。
apt-getでmod_wsgiをインストールします。
# apt-get install libapache2-mod-wsgi
とりあえずのお試しなので、/etc/apache2/sites-available/defaultを
直接編集します。
/bsのリクエストで、/opt/bottlesample/adapter.wsgiを呼び出します。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
(略)
WSGIScriptAlias /bs /opt/bottlesample/adapter.wsgi
<Directory /opt/bottlesample>
Order deny,allow
Allow from all
</Directory>
(略)
</VirtualHost>
追加が終わったらApacheを再起動します。
# /etc/init.d/apache2 restart
http://www.example.com/bs/にアクセスしてみると、見事表示されました。
リンクの解決もバッチリです。
【参考URL】
Tutorial: Todo-List Application
http://bottlepy.org/docs/dev/tutorial_app.html
Apache と mod_wsgi 環境で Django を使う方法
http://docs.nullpobug.com/django-doc-ja/trunk/howto/deployment/modwsgi.html
- 関連記事
-
- Windows + Python 64bit版でPython Imaging Library (PIL)を使用する
- 単機能コードスニペットツール「Danpen」をapache + mod_wsgiで動かす
- Apache + mod_wsgiでBottleフレームワークのアプリケーションを動かす
- PythonのBottleフレームワークで静的ファイルのリンク生成
- Pythonの軽量Webフレームワーク「Bottle」
コメント