BGM : light prayer by school food punishment
Ciel Sereinの安田さんからZope/Ploneアドベントカレンダーのバトンが回ってきました。
GrokはZope3をベースとしたWebアプリフレームワークです。非常に簡単にWebアプリを作ることが出来ます。最初の雛形になるアプリを動作させるまではエディタでファイルを編集する必要はありません。
OSをインストールした初期状態からアプリを動作させてApacheと組み合わせて動作させるまでを説明します。
1.下準備
Pythonとbashが入っていない場合はインストールします。Pythonのバージョンは2.5です。
シェルはbashを使います。
Easy Installのインストール
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ sudo python2.5 ez_setup.py
VirtualEnvのインストールとセットアップ
$ sudo easy_install-2.5 virtualenv
$ virtualenv --no-site-packages virtualgrok
$ cd virtualgrok
$ source bin/activate
これで仮想環境にGrokをインストールする準備が出来ました。
2.Grokのインストールと雛形のセットアップ
$ easy_install grokproject
$ grokproject SampleEnter user (Name of an initial administrator user): [管理者の名前]
Enter passwd (Password for the initial administrator user): [管理者のパスワード]
ちょっと時間がかかりますが辛抱してください。
雛形のアプリを実行します。
$ cd Sample
$ bin/paster serve parts/etc/deploy.ini
localhostのポート8080番にアクセスします。
Grokを動かしているのがリモートホストの場合はsshでトンネルを掘ります。
http://localhost:8080/ にアクセスすると管理者の名前とパスワードの入力を要求されるので名前とパスワードを入力します。
そうすると次のような画面が表示されます。
Add applicationの欄のsample.app.SampleのName your new appにアプリケーション名testを入力してCreateボタンを押します。
http://localhost:8080/test にアクセスすると
入力された数字までのフィボナッチ数を列挙する単純なアプリを作ります。
src/sample/app.py を次のように書き換えます。
import grokclass Sample(grok.Application, grok.Container):
pass
class Index(grok.View):
def getResults(self):
def fib(n):
if n < 2:
return n
else:
return fib(n-2) + fib(n-1)
max = int(self.getMax())
result = []
for n in range(max+1):
entry = {}
entry['n'] = n
entry['fib(n)'] = fib(n)
result.append(entry)
return result
def getMax(self):
return self.request.get('max') or '1'
Zope Page Template src/sample/app_templates/index.pt を次のように書き換えます。
<html>
<head>
</head>
<body>
<form action="" tal:attributes="action view/url">
<input type = "text" name="max" value ="" size="10" tal:attributes="value view/getMax">
<input type="submit">
</form>
<table border="1">
<tr>
<td align="right">n</td>
<td align="right">fib(n)</td>
</tr>
<div tal:repeat="entry view/getResults">
<tr>
<td align="right"><p tal:content="entry/n"></p></td>
<td align="right"><p tal:content="entry/fib(n)"></p></td>
</tr>
</div>
</table>
</body>
</html>
アプリを再実行します。
^C
$ bin/paster serve parts/etc/deploy.ini
4.Apacheとの連携
外部からアクセスできるようにするには parts/etc/deploy.iniを書き換えることでも可能になりますが、Apacheをフロントエンドにする方法を説明します。
Zope3のVirtual Hosting機能(http://wiki.zope.org/zope3/virtualhosting.html)を使います。
http://grok.example.com/ にアクセスされると http://localhost:8080/test/ にリダイレクトするように設定します。
ServerName grok.example.com
RewriteEngine On
RewriteRule ^(.*) http://localhost:8080/test/++vh++http:grok.example.com:80/++$1 [P,L]
次のバトンはaodagさんにお渡しします。