開発サーバにデータをリストア(復元)する

  • Web サーバのデータをローカル開発サーバで利用したい場合の対処

ここの説明は、基本的に Loader クラスを自前で用意しなくて済む方法です。


まず、remote_api へアクセスできるように app.yamlhandlers に以下を追加しておきます。

#
# app.yaml
#
handlers:

# (中略)

- url: /remote_api
  script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
  login: admin

# (中略)


App Engine の Web サーバからデータのバックアップを取得します。 /backup ディレクトリ等を適当に作って、そこで appcfg.pyコマンドラインで以下のように実行します(実行ディレクトリにログファイルがたくさん作成されます)。

appcfg.py download_data \
    --application=<app-id> \
    --url=http://<appname>.appspot.com/[remote_api_path] \
    --filename=<data-filename>

具体例として,Test Web Frames では、以下のようになります。

appcfg.py download_data \
    --application=testwebframes \
    --url=http://testwebframes.appspot.com/remote_api \
    --filename=backup

(ここでは、正式なメールアドレスとパスワードの入力を要求されます)
backup ファイルは SQLite3 形式です。


ここで得られた backup を開発サーバにリストアするには、bulkloader.pyコマンドラインで以下のように実行します。

bulkloader.py --restore \
    --application=testwebframes \
    --url=http://localhost:8087/remote_api \
    --filename=backup

(ここで要求されるメールアドレスとパスワードは適当でいいです)
開発サーバにデータが復元されたはずです。 これでいつでもデータストアを空にできます。
注)データ量が多ければ多いほど、プロジェクトの起動時に時間がかかります。


一方、開発サーバには以下のような制限があるため、開発サーバでデータを追加して Web サーバに再反映させるといったことは難しいようです。 開発サーバにおけるバックアップ取得は簡単ではないようです。

注意: 全ての kind に属する全てのエンティティのダウンロードは、App Engine 上でのみ動作します。開発用サーバーでは動作しません。