4

要使用原始 dev_appserver 在本地访问远程数据存储,我将设置 --default_partition=s 如此处所述

2013 年 3 月,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 ID。开发服务器模拟生产 App Engine 服务。它执行此操作的一种方法是将字符串 (dev~) 预置到 APPLICATION_ID 环境变量中,这类似于使用 High Replication Datastore 的应用程序在生产中预置的字符串。您可以使用 --default_partition 标志修改此行为,选择“”值以匹配生产中的主从选项。Google 建议始终使用 get_application_id() 方法获取应用程序 ID,并且永远不要使用 APPLICATION_ID 环境变量。

4

1 回答 1

2

您可以执行以下肮脏的小技巧:

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
于 2013-10-23T12:39:11.853 回答