devappserver2, remote_api и --default_partition

Чтобы получить доступ к удаленному хранилищу данных локально с помощью исходного dev_appserver, я бы установил --default_partition=s, как указано здесь

В марте 2013 года Google сделал devappserver2 сервером разработки по умолчанию, и он не поддерживает параметр --default_partition, в результате чего исходное, ужасное:

BadRequestError: app s~appname cannot access app dev~appname's data

Похоже, что первые несколько запросов обслуживаются правильно с

os.environ["APPLICATION_ID"] == 's~appname'

Затем последующий запрос приводит к вызову /_ah/warmup, а затем

os.environ["APPLICATION_ID"] == 'dev~appname'

В документах конкретно упоминаются связанные темы, но, похоже, они ориентированы на dev_appserver здесь

Предупреждение! Не получайте идентификатор приложения из переменной среды. Сервер разработки имитирует рабочую службу App Engine. Один из способов сделать это — добавить строку (dev~) к переменной среды APPLICATION_ID, которая аналогична строке, добавляемой в начале для приложений, использующих хранилище данных с высоким уровнем репликации. Вы можете изменить это поведение с помощью флага --default_partition, выбрав значение "" в соответствии с параметром master-slave в рабочей среде. Google рекомендует всегда получать идентификатор приложения с помощью метода get_application_id() и никогда не использовать переменную среды APPLICATION_ID.


person willo    schedule 29.04.2013    source источник
comment
Он жестко запрограммирован как «dev» в google/appengine/tools/devappserver2/application_configuration.py, строка 84 SDK версии 1.8.4. У меня сработало, если я изменил строку.   -  person Kenji Noguchi    schedule 17.09.2013
comment
Спасибо Кендзи Ногучи :)   -  person mshameers    schedule 10.10.2013


Ответы (1)


Вы можете сделать следующий грязный трюк:

from google.appengine.datastore.entity_pb import Reference

DEV = os.environ['SERVER_SOFTWARE'].startswith('Development')

def myApp(*args): 
    return os.environ['APPLICATION_ID'].replace("dev~", "s~")

if DEV:
    Reference.app = myApp
person fmatheis    schedule 23.10.2013