在 GAE 本地开发服务器中使用 GCS

Using GCS in GAE Local devserver

昨天这段代码在本地和生产服务器上都运行良好:

import cloudstorage

def filelist(Handler):
    gs_bucket_name="/bucketname"
    list=cloudstorage.listbucket(gs_bucket_name)
    logging.warning(list)
    self.write(list)
    for e in list:
        self.write(e)
        self.write("<br>")

从昨天到今天,我升级了 GAE Launcher 并更改了计费选项(我使用的是免费试用版,现在是付费帐户)(不确定是否有任何关系,但只是提供额外信息)

但是今天代码在本地停止工作(在生产中工作正常)

这是错误日志的开头

WARNING  2015-02-20 09:50:21,721 admin.py:106] <cloudstorage.cloudstorage_api._Bucket object at 0x10ac31e90>

ERROR    2015-02-20 09:50:21,729 api_server.py:221] Exception while handling service_name: "app_identity_service"
method: "GetAccessToken"
request: "\n7https://www.googleapis.com/auth/devstorage.full_control"
request_id: "WoMrXkOyfe"

警告显示了一个存储桶对象,但是当我尝试在列表中进行迭代时,身份服务出现异常。

发生了什么事?看来我需要授权本地devserver gcs模型,但我不确定如何。

记住这只发生在开发服务器中,而不是生产中。

感谢您的帮助

我相信问题的原因是最近发布的本地开发服务器 (GoogleAppEngineLauncher) 中的错误。 我在 PHP 运行时遇到类似的情况:GloudStorage fails locally

这是最新版本 (1.9.18) 的问题。现在,在它得到修复之前,您可以通过从此处下载安装程序来降级到 1.9.17,只需 运行 它:https://storage.googleapis.com/appengine-sdks/featured/GoogleAppEngineLauncher-1.9.17.dmg

根据下面的回答,1.9.18 已针对此问题进行了修补。如果你还想安装1.9.17版本,请按照这个link:https://storage.googleapis.com/appengine-sdks/deprecated/1917/GoogleAppEngineLauncher-1.9.17.dmg

更新:截至 2105 年 3 月 5 日,此问题已在 1.9.18 的 public 版本中修复,这可能是获得修复的更简单方法。

注意:虽然在 Python 中进行了修复,但在 Java、PHP 和 Go 中也会出现问题,因为它们使用 Python 本地开发服务器代码。

这是 dev_appserver 中的一个已知错误,其中 SDK 无法处理早期版本中已保留的凭据。对我来说(在 Ubuntu 15.10 和 SDK 1.9.33 上)它有助于简单地删除一个文件:

rm ~/.config/gcloud/application_default_credentials.json

如 Jari Wiklund 提交的 bug issue 中所建议。