【问题标题】:No api proxy found for service "app_identity_service" when running GAE script运行 GAE 脚本时找不到服务“app_identity_service”的 api 代理
【发布时间】:2015-07-20 07:49:36
【问题描述】:

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

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 时给了我导入错误。

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

【问题讨论】:

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


    【解决方案1】:

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

    你有两个选择:

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

    【讨论】:

      【解决方案2】:

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

      特别是,初始化应用身份存根解决了我的问题:

      from google.appengine.ext import testbed
      
      t = testbed.Testbed()
      t.init_app_identity_stub()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-26
        • 2021-11-29
        • 2020-01-03
        • 2015-10-25
        • 2011-02-09
        • 2014-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多