【问题标题】:devappserver2, remote_api, and --default_partitiondevappserver2、remote_api 和 --default_partition
【发布时间】:2013-04-29 20:37:36
【问题描述】:

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

【问题讨论】:

  • 它在 google/appengine/tools/devappserver2/application_configuration.py 的 1.8.4 SDK 第 84 行硬编码为“dev”。如果我更改字符串,它对我有用。
  • 谢谢Kenji Noguchi :)

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-02-19
    • 2012-09-06
    • 1970-01-01
    • 2014-06-23
    • 2012-09-10
    • 2014-10-26
    • 2013-09-09
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多