Как получить доступ к данным сервера приложений Google App Engine из командной строки - PullRequest
1 голос
/ 23 августа 2011

Я регулярно загружаю свои производственные данные Google App Engine локально (используя собственный скрипт, который обычно вызывает appcfg.py download_data) и загружаю их на сервер разработки, чтобы данные в моей среде разработки соответствовали производственным. Вы можете найти скрипты на Launchpad:

Вот что делает скрипт запуска:

Все работало нормально до GAE 1.5.2. В этот момент сервер разработки изменился на префикс dev~, поэтому я добавил --default_partition='', чтобы запустить сервер разработки. Однако теперь, похоже, скрипт смены пароля не имеет доступа к загруженным данным, он всегда возвращает 0 сущностей для обычных пользователей или пользователей с правами администратора. Мне интересно, как получить доступ к данным из командной строки, поэтому явно не из URL, чтобы предотвратить это когда-либо на рабочем сервере. Скрипты в ./extra не загружаются в GAE, поэтому оттуда они не могут быть выполнены.

Чтобы дать вам представление (но посмотрите на сценарий для большего контекста), это то, что скрипт использовал (и работал до GAE <= 1.5.1): </p>

args, option_dict = ParseArguments(['', colCasaBasePath])
config, matcher = LoadAppConfig(colCasaBasePath, {})
SetupStubs(config.application, **option_dict)

Доступ к моделям приложения осуществляется в обычном режиме:

from src.models import WebUser, ScyllaUser
for tipo in (WebUser, ScyllaUser):
    usuarios = tipo.all()
    # Now len(usuarios) == 0

Что было изменено (после GAE 1.5.1), что нарушает мой сценарий доступа к данным GAE? Как бы вы выполнили такой рабочий процесс?

1 Ответ

0 голосов
/ 24 августа 2011

Хитрость заключается в добавлении аргумента --default_partition= к вызову ParseArguments() в сценарии, который обращается к данным GAE:

args, option_dict = ParseArguments(['', colCasaBasePath, "--default_partition="])

Обратите внимание, что после = ничего нет, вот что меня оттолкнуло. Сначала я попытался добавить "--default_partition=''", но это не имело никакого эффекта (но также не привело к ошибкам).

После добавления этого вызова скрипт снова может перебирать всех пользователей, которые были загружены в хранилище данных dev. Вы можете увидеть изменения, которые мне пришлось сделать на панели запуска .

...