読者です 読者をやめる 読者になる 読者になる

DreamerDreamのブログ

夢想家の夢です。

BottleとApache2を連携させる。

BottleとApacheとの連携には「アダプタ」というものが必要らしい。

アダプタとはWSGIというWEBサーバの共通インターフェースとかいうものらしいが詳しくは良くわからない。

とにかくWSGIをいうものをインストールしてApacheにモジュール登録しないといけないらしい。

 

WSGIインストール

sudo apt-get install libapache2-mod-wsgi

モジュールの有効化

sudo a2enmod wsgi

/etc/apache2/sites-available/ 内の設定ファイルにSWGIで作るアダプタの場所を設定する

WSGIScriptAlias / /var/www/sample/hello.wsgi
<Directory /var/www/sample/>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory> 

 これでアクセス時にhello.wsgiが呼ばれる。

 

WSGIでアダプタ生成する。

sudo nano /var/www/sample/hello.wsgi

 -- hello.wsgi --

# -*- coding:utf-8 -*-

import sys, os
sys.path.append(os.path.dirname(os.path.abspath(__file__))) #スクリプトが置かれているフォルダのパスを通す

import bottle, hello #Bottle本体とアプリを読み込む
application = bottle.default_app()

これでimport bottle, helloで指定しているBottleファイルのhello.pyが実行されるようになる。

 

Bottle用pythonファイルhello.pyを生成すると、前回書いたBottleで直にWebサーバを構築した時と同じように実行されるはず。・・・が、何故か僕の環境ではデフォルトでテンプレートの置き場として指定してあるはずのviewsディレクトリを読み込んでくれなかった。こんにゃろ

なので手動でTEMPLATE_PATHをインポートする

-- hello.py --

#coding:utf-8

from bottle import route, run, template
from bottle import TEMPLATE_PATH

TEMPLATE_PATH.append("/var/www/sample/views")


@route('/hello/<name>')
def hello(name = 'World'):
     return template("show",name=name)

テンプレート指定はTEMPALTE_PATHというリストに登録させるようだ。

-- /var/www/sample/views/show --

HELLO!{{name}}

{{ }}で囲んだ名前の部分に指定文字を代入させることが出来る。

これで http://(サーバーアドレス)/hello/ONYANCOPON

とアクセスすると

HELLO!ONYANCOPON

と表示されるようになる。

 

面倒臭いが一度設定出来てしまうとpythonなので結構応用が効いて便利。

そのままpythonプログラムを組み込んで実行させることも可能だし、シェルを介して他のプログラムを実行させることも出来る。

但しRaspberryPiのGPIOへ出力させるにはローレベルのアクセス権が必要になるのでApacheからGPIOを出力させるにはwww-dataユーザーでsudo権を実行出来るようにする必要がある。