kay frameworkを触ってみる

こんどkay frameworkを使いそうなのでちょっとでも知っておこうと思って触ってみました。
ほとんどチュートリアルのまんまです。

インストール

pipとかでいれるのかと思ったらそうじゃない

$ cd /usr/local
$ hg clone https://kay-framework.googlecode.com/hg/ kay

Google App Engine以前いれたので省略

プロジェクトの作成

$ python /usr/local/kay/managy.py startproject kayapp
Running on Kay-2.0.0qa1
Finished creating new project: kayapp.

以下のようにファイルが作成されます

$ tree kayapp/
kayapp/
├── app.yaml
├── favicon.ico
├── kay -> /usr/local/kay/kay
├── manage.py -> /usr/local/kay/manage.py
├── settings.py
└── urls.py

アプリの作成

$ cd kayapp
$ python manage.py startapp myapp
Running on Kay-2.0.0qa1

startappでは以下のようなファイルが作成されます

$ tree myapp
myapp
├── __init__.py
├── models.py
├── templates
│   └── index.html
├── urls.py
└── views.py

settings.pyを編集して作成したアプリを登録します

settings.py

INSTALLED_APPS = (
    'myapp'          # 追加
)

APP_MOUNT_POINTS = {
    'myapp': '/'     # 追加
}

動かしてみる

早速動かしてみます。
こんなエラーがでました。pythonのバージョンが2.7.2だとダメ?

$ python manage.py runserver
WARNING:root:The rdbms API is not available because the MySQLdb library could not be loaded.
Traceback (most recent call last):
  File "manage.py", line 24, in <module>
    script.run()
  File "/Users/yuhei/kayapp/kay/lib/werkzeug/script.py", line 121, in run
    return func()
  File "/Users/yuhei/kayapp/kay/management/runserver.py", line 46, in runserver_passthru_argv
    p = get_datastore_paths()
  File "/Users/yuhei/kayapp/kay/misc/__init__.py", line 56, in get_datastore_paths
    get_appid())
  File "/Users/yuhei/kayapp/kay/misc/__init__.py", line 21, in get_appid
    appconfig, unused = dev_appserver.LoadAppConfig(PROJECT_DIR, {})
ValueError: too many values to unpack


2.5でやってみます。

$ mkvirtualenv --python=python2.5  sandbox.2.5
Running virtualenv with interpreter /usr/bin/python2.5
New python executable in sandbox.2.5/bin/python2.5
Also creating executable in sandbox.2.5/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /Users/yuhei/.virtualenvs/sandbox.2.5/bin/predeactivate
virtualenvwrapper.user_scripts creating /Users/yuhei/.virtualenvs/sandbox.2.5/bin/postdeactivate
virtualenvwrapper.user_scripts creating /Users/yuhei/.virtualenvs/sandbox.2.5/bin/preactivate
virtualenvwrapper.user_scripts creating /Users/yuhei/.virtualenvs/sandbox.2.5/bin/postactivate
virtualenvwrapper.user_scripts creating /Users/yuhei/.virtualenvs/sandbox.2.5/bin/get_env_details


$ python manage.py runserver
WARNING:root:The rdbms API is not available because the MySQLdb library could not be loaded.
Traceback (most recent call last):
  File "manage.py", line 24, in <module>
    script.run()
  File "/Users/yuhei/kayapp/kay/lib/werkzeug/script.py", line 121, in run
    return func()
  File "/Users/yuhei/kayapp/kay/management/runserver.py", line 46, in runserver_passthru_argv
    p = get_datastore_paths()
  File "/Users/yuhei/kayapp/kay/misc/__init__.py", line 56, in get_datastore_paths
    get_appid())
  File "/Users/yuhei/kayapp/kay/misc/__init__.py", line 21, in get_appid
    appconfig, unused = dev_appserver.LoadAppConfig(PROJECT_DIR, {})
ValueError: too many values to unpack


ダメでした。

ググったらこちらで情報を発見
http://tategakibunko.blog83.fc2.com/blog-entry-460.html

そういえばちょっと前にほかのGAEアプリ開発で同じエラー踏んだ記憶が。

kay/misc/__init__.pyを修正します

def get_appid():
  from google.appengine.api import apiproxy_stub_map
  have_appserver = bool(apiproxy_stub_map.apiproxy.GetStub('datastore_v3'))
  if have_appserver:
    appid = os.environ.get('APPLICATION_ID')
  else:
    try:
      from google.appengine.tools import dev_appserver
      from kay import PROJECT_DIR
      #appconfig, unused = dev_appserver.LoadAppConfig(PROJECT_DIR, {}) #コメントアウト
      appconfig, matcher, from_cache = dev_appserver.LoadAppConfig(PROJECT_DIR, {}) #追加
      appid = appconfig.application
    except ImportError:
      appid = None
  return appid

さあ、どうでしょう。

$ python manage.py runserver
Running on Kay-2.0.0qa1
WARNING:root:No ssl package found. urlfetch will not be able to validate SSL certificates.
WARNING:root:The rdbms API is not available because the MySQLdb library could not be loaded.
INFO:google.appengine.tools.appengine_rpc:Server: appengine.google.com
INFO:root:Checking for updates to the SDK.
WARNING:root:Could not read datastore data from /var/folders/fb/drnqpdzd58vgyllnn4p_8tb40000gn/T/kay_kayapp.datastore
WARNING:root:Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging
INFO:root:Running application dev~kayapp on port 8080: http://localhost:8080
INFO:root:Admin console is available at: http://localhost:8080/_ah/admin

動きました。

こんなページが表示されます。

アップロード

1. appidを以下のURLのページで登録する
https://appengine.google.com/

2. 1で登録したappidをapp.yamlのapplicationに記述する

application: 登録したappid
version: 1
runtime: python
api_version: 1

3. 以下を実行

$ python manage.py appcfg update

とくに問題はありませんでした