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



昨天,此代码在本地和生产服务器中都运行良好:

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"

该警告显示了一个bucket对象,但当我尝试在列表中迭代时,我就会得到标识服务上的异常。

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

请记住,这只发生在devserver中,而不是在生产中。

感谢您的帮助

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

根据下面的答案,1.9.18已经对此进行了修复。如果您仍然想安装1.9.17版本,请点击此链接:https://storage.googleapis.com/appengine-sdks/deprecated/1917/GoogleAppEngineLauncher-1.9.17.dmg

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

rm ~/.config/gcloud/application_default_credentials.json

正如Jari Wiklund提交的bug问题中所建议的那样。

更新:截至2105年3月5日,这在1.9.18的公开版本中得到了修复,这可能是一种更简单的修复方法。

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

我确实认为问题的原因是最近发布的本地开发服务器(GoogleAppEngineLauncher)中的一个错误。我在PHP运行时遇到了类似的情况:GloudStorage在本地失败

最新更新