gaebar
gaebarと書いてゲイバーと読むそうです。
何をするものかというと、GoogleAppEngineで使用するBigTableの中身をバックアップするというもの。
http://takashi-matsuo.blogspot.com/2009/02/gaebar.html
http://code.google.com/intl/ja/appengine/articles/gae_backup_and_restore.html
GAE/Jで作成したBigTableもバックアップできるのかなと。
ただし、アプリはPython。
しかも既存のプロジェクトのプラグインとして動作するそうです。
まずはPhtyonのプロジェクトを作成するところからです。
下記を参考にGAEで動くプロジェクトを作成。
http://itpro.nikkeibp.co.jp/article/COLUMN/20080529/305017/
はい、Hello!Worldは出せました。
http://py01.latest.yamataku-gaetest.appspot.com/
で、gaebarはDjangoというフレームワークを使ったプロジェクトじゃないと動かないということなので、Djangoについてお勉強。
GAEで動くDjangoプロジェクトは以下を参考に。
http://thomas.broxrost.com/2008/04/08/django-on-google-app-engine/
ふむふむ。動いてはいるようだ。
gaebarの作者のページを見てみると、gaebarを使う前提のスケルトンが公開されているようです。
gaebar-gaed-skeleton:
http://github.com/aral/gaebar-gaed-skeleton/tree/master
gaebar:
http://github.com/aral/gaebar/tree/master
このスケルトンとgaebarをダウンロードします。
> git clone git://github.com/aral/gaebar-gaed-skeleton.git > cd gaebar-gaed-skeleton > git clone git://github.com/aral/gaebar.git
settings.pyを開き、GAEBAR_LOCAL_URL,GAEBAR_SECRET_KEY,GAEBAR_SERVERSを設定します。
(GAEBAR_MODELSはまたあとで。)
とりあえずローカルで動作確認するもエラー。
ImportError: No module named _multiprocessing
下記のページを参考にdev_appserver.pyを変更。
http://d.hatena.ne.jp/tmatsuu/20090818/1250606215
再度起動するもまたエラー
Application configuration could not be read from ".\app.yaml"
今度は下記のページを参考にすると、スケルトンに含まれているappengine_helperが古いと推測。
http://code.google.com/p/google-app-engine-django/issues/detail?id=115
下記より最新版のr86を取得し、差し替える
http://code.google.com/p/google-app-engine-django/downloads/list?can=1&q=
今度はローカルで起動OK!
デプロイすると本番でも起動OK
先ほどモデルを設定しなかったので、モデルの設定を。
スケルトンにはなにもアプリケーションが入っていないので、モデルも含まれていません。
Javaで作ったモデルをDataViewerを見ながらPythonのモデルに変更し、記述します。
まずはmodels.pyを格納するためのサブフォルダを作り、__init__.pyとmodels.pyを配置する。
> mkdir app1 > cd app1 > touch __init__.py > touch models.py
models.pyを編集。
from google.appengine.ext import db class CaliculateResult(db.Model): index = db.IntegerProperty() result = db.StringProperty()
こんな具合。
で、settings.pyのGAEBAR_MODELSに以下のように追加
GAEBAR_MODELS = ( ( 'app1.models', (u'CaliculateResult'), ), )
これで動くようになりました。