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, выбрав значение "" для соответствия опции "ведущий-ведомый" в производстве. Google рекомендует всегда получать идентификатор приложения с помощью метода get_application_id() и никогда не использовать переменную среды APPLICATION_ID.

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
Другие вопросы по тегам