运行GAE脚本时,没有为服务“app_identity_service”找到api代理

时间:2015-07-20 07:49:37

标签: python google-app-engine google-cloud-storage

我正在尝试运行自定义条带以将静态文件上传到存储桶。

import os
import sys
sys.path.append("/tools/google_appengine")
from google.appengine.ext import vendor
from google.appengine.api import app_identity
vendor.add('../libraries')

import cloudstorage as gcs

STATIC_DIR = '../dashboard/dist'

def main():
    bucket_path = ''.join('/' + app_identity.get_default_gcs_bucket_name())

到目前为止我一直在努力: - 手动初始化存根

def initialize_service_apis():
    from google.appengine.tools import dev_appserver

    from google.appengine.tools.dev_appserver_main import ParseArguments
    args, option_dict = ParseArguments(sys.argv) # Otherwise the option_dict isn't populated.
    dev_appserver.SetupStubs('local', **option_dict)

(摘自https://blairconrad.wordpress.com/2010/02/20/automated-testing-using-app-engine-service-apis-and-a-memcaching-memoizer/

但是在导入dev_appserver lib时,这会导致导入错误。

有什么方法可以解决这个问题吗? 我需要这个脚本来进行自动部署过程。

2 个答案:

答案 0 :(得分:0)

我不熟悉dev_appserver.SetupStubs(),但在测试平台中运行单元测试时收到了同样的错误消息。在该环境中,您必须为要测试的任何服务明确启用存根(请参阅docs)。

特别是,初始化app identity stub解决了我的问题:

from google.appengine.ext import testbed

t = testbed.Testbed()
t.init_app_identity_stub()

答案 1 :(得分:0)

No api proxy found for service <blah>错误消息通常表示尝试在独立脚本中使用GAE标准env基础结构(在您的情况下为google.appengine下的包),这是不正常的。请参阅GAE: AssertionError: No api proxy found for service "datastore_v3"

您有两个选择:

  • 保留代码但让它执行内部 GAE应用程序(例如,作为请求处理程序),而不是作为独立脚本
  • 删除GAE库并切换到旨在从独立的scrips中使用的库。在你的情况下,你正在寻找Cloud Storage Client Libraries。您可能还需要将access control调整为相应的GAE应用包。