GoogleAppEngineでremote_apiを使う s_thx>tmatsuo
GogoleAppEngineで、日本語検索作ってたら、転置インデックスの作り方ミスった。簡単に直ったんだけど既にappspot.comで作成された転置インデックスが邪魔なので一気に消したいが、デフォルトのDashBordでは一気に消せるインターフェースが用意されていない。20個ずつポチポチ手で消していたら、寝ようとしていたtmatsu様が救いの手を差しのべてくれた。
「remote api あるお>http://code.google.com/intl/en/appengine/articles/remote_api.html」
それから色々やって、結局の所動いた。
ローカルのshから、直接Googleのサーバーのデータをいじれる。
実際に操作した物を貼ってみる。
% python appengine_cosole.py a2c-dev App Engine interactive console for a2c-dev >>> import ngram >>> import ngram.main >>> from google.appengine.ext import db >>> ent = ngram.main.Feed.all() >>> ent.count() Username:hogehoge@gmail.com Password: 0L >>> ent = ngram.main.InverseIndex.all() >>> ent.count() 666L >>> db.delete(ent) >>> ent.count() 646L >>> for i in ent: ... i.delete() ... >>> ent.count() 626L >>> entities = ent.fetch(400) >>> db.delete(entities) >>> entities = ent.fetch(400) >>> db.delete(entities) >>> ent = ngram.main.InverseIndex.all() >>> ent.count() 0L >>>
500個以上のデータを一気に操作することが出来ないらしいので、400個ずつ消してみた。はじめは666個も有ったのに、たった2回の操作で全部消せた。毎回同じ事するならコードに書いても良いけど、たまにするくらいならこっちの方が全然いい。
以下手順。
app.yamlに リモートアクセス用のurlを追加する。
- url: /remote_api script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py login: admin
appの中にPythonスクリプトを用意する。
#!/usr/bin/env python # coding:utf-8 import code import getpass import sys import os # g_pathは適宜ご自分の環境に書き換えてください g_path = "/Applications/MyApp/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine" extra_path = [ g_path, os.path.join(g_path, 'lib', 'antlr3'), os.path.join(g_path, 'lib', 'webob'), os.path.join(g_path, 'lib', 'django'), os.path.join(g_path, 'lib', 'yaml', 'lib') ] sys.path = extra_path + sys.path from google.appengine.ext.remote_api import remote_api_stub from google.appengine.ext import db def auth_func(): return raw_input('Username:'), getpass.getpass('Password:') if len(sys.argv) < 2: print "Usage: %s app_id [host]" % (sys.argv[0],) app_id = sys.argv[1] if len(sys.argv) > 2: host = sys.argv[2] else: host = '%s.appspot.com' % app_id remote_api_stub.ConfigureRemoteDatastore(app_id, '/remote_api', auth_func, host) code.interact('App Engine interactive console for %s' % (app_id,), None, locals())
このファイルが、Googleの解説ページのやつのままだと動かなくて、tmatsuo氏に教えて貰った。9行目のg_pathには、appengineのインストールされているところを差し替えてくらさい。
あとは、deployして準備OK
python2.5 appengine_cosole.py yourApp-ID
と言う風に、起動する。あとは、自分のアプリを適当にぽこりんこImport すればOK