Keep on moving

あんまりまとまってないことを書きますよ

junoを使ってみた(1)

近頃、社内勉強会でRubyをつかっていることもあり、すっかりRubyづいている今日この頃です。

Sinatraをインストールして軽くいじって遊んでいたりしてます。
で、Pythonでも似た感じのがないかな〜と思ってちょっと検索してみたらmoongiftさんの以下の記事を発見しました。
SinatraライクなPython用軽量Webフレームワーク「Juno」
なるほど、これは確かにSinatraっぽい。
a lightweight and simple python web frameworkって言うのも気に入ったので早速インストールし、GAEで動かしてみました。

インストール

0を1にする瞬間が難しい: lightweight web framework Juno,juno/doc/1-setup.mdを参考にインストール

SQLAlchemy,Jinja2,Makoをインストール*1。Debugが使えるとのことなのでWerkzeugもインストールしときました。

実際に動かしてみる

まずはご挨拶から。hello_world.pyを参考に、でもSinatraを意識して冒頭ページの例っぽく書いてみた。

from juno import *
 
@route('/hi')
def index(web):
  return 'Hello, World'

run()

これを適当なファイル(例 hello.py)に書いて、

python hello.py

を実行するとwebサーバーが立ち上がって、localhost:8080/hiにアクセスすると以下のように"Hello,World"って出てくれる。

f:id:Ehren:20090716005733p:image

GAEで使ってみる

実は7/15現在、junoのソース変更なしでは動きません。
あまり動かし方が書いてあるところがなかったのですが、http://gist.github.com/140565にありました。
なるほど、

  sys.stdout = sys.stderr

ってなってるところを削るのか。たぶんこれは作者さんが故意に使えないようにしてるのかも。
ただ、確かにこれを削ると動く。*2
さっきのソースを以下のように変更すると無事GAEでも動きます。

from juno import *

#junoの設定
init({
  'use_db': False,        #DBは使わないように設定
  'use_templates': False, #テンプレートは使わないように設定 実際は使えます
  'log': False            #ログ出力を止める
})
 
@route('/hi')
def index(web):
  return 'Hello, World'

run(mode='appengine')

*1:実際にはJinja2だけでもよいのかも

*2:削らないとコンソールに出ちゃいます