こんどkay frameworkを使いそうなのでちょっとでも知っておこうと思って触ってみました。
ほとんどチュートリアルのまんまです。
インストール
pipとかでいれるのかと思ったらそうじゃない
$ cd /usr/local $ hg clone https://kay-framework.googlecode.com/hg/ kay
プロジェクトの作成
$ 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
とくに問題はありませんでした