devappserver2,remote_api和--default_partition

时间:2013-04-29 20:37:36

标签: google-app-engine dev-appserver-2

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

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 here

  

警告!不要从环境变量中获取App ID。开发服务器模拟生产App Engine服务。执行此操作的一种方法是在APPLICATION_ID环境变量前添加一个字符串(dev~),该变量类似于使用High Replication数据存储区的应用程序在生产中预先设置的字符串。您可以使用--default_partition标志修改此行为,选择值“”以匹配生产中的主从选项。 Google建议始终使用get_application_id()方法获取应用程序ID,并且永远不要使用APPLICATION_ID环境变量。

1 个答案:

答案 0 :(得分: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