Symfoware

Symfowareについての考察blog

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


  1. # -*- coding:utf-8 -*-
  2. from bottle import route, run, view, static_file, url
  3. @route('/static/<filepath:path>', name='static_file')
  4. def static(filepath):
  5.     return static_file(filepath, root="./static")
  6. @route('/', name="index")
  7. @view("index_template")
  8. def index():
  9.     return dict(url=url)
  10. @route('/<name>/<count:int>', name="hello")
  11. @view("hello_template")
  12. def hello(name, count):
  13.     return dict(name=name, count=count, url=url)
  14. if __name__ == '__main__':
  15.     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


  1. # -*- coding:utf-8 -*-
  2. import sys, os
  3. dirpath = os.path.dirname(os.path.abspath(__file__))
  4. sys.path.append(dirpath)
  5. os.chdir(dirpath)
  6. import bottle
  7. import index
  8. application = bottle.default_app()





最終的なディレクトリの構成は以下のようになっています。

161_01.png





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/にアクセスしてみると、見事表示されました。
リンクの解決もバッチリです。

161_02.png

161_03.png




【参考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


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/01/03(木) 17:02:11|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<単機能コードスニペットツール「Danpen」をapache + mod_wsgiで動かす | ホーム | PythonのBottleフレームワークで静的ファイルのリンク生成>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1070-8180e9cc
この記事にトラックバックする(FC2ブログユーザー)