前回
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_PATHTEMPLATE_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権を実行出来るようにする必要がある。