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