猿问

在本地 devappserver 上使用 google-api-go-client

我正在编写一个将在 GCE 上运行的应用程序,并使用https://code.google.com/p/google-api-go-client/ 中的 google-api-go-client /在 GCS 中存储数据。


我还有一个 GAE 应用程序正在运行,GCE 应用程序与之通信。


我可以在本地运行我的 GCE 应用程序并与实时 GCS 服务器通信并存储文件并检索它们。


现在我正在尝试将文件本地存储在 GCS 中,以便我可以运行测试环境。


我看到 devappserver 支持通过 blobstore 模拟 GCS。但是,我似乎无法弄清楚如何将我的 GCE 应用程序指向本地 devappserver 以进行 GCS 存储。


我正在使用我的 GAE 应用程序通过“goapp serve”运行 devappserver。


我曾尝试设置基本路径,结果导致 devappserver 出现 500 个错误。


service, err := storage.New(httpClient)

service.BasePath = "http://localhost:8080/_ah/gcs/"

结果


ERROR    2014-10-23 19:14:08,692 module.py:727] Request to '/_ah/gcs/b/default/o/6051711999279104' failed

Traceback (most recent call last):

  File "/home/ben/go_appengine/google/appengine/tools/devappserver2/module.py", line 723, in _handle_request

    return handler.handle(match, environ, wrapped_start_response)

  File "/home/ben/go_appengine/google/appengine/tools/devappserver2/wsgi_handler.py", line 59, in handle

    return self._wsgi_app(environ, start_response)

  File "/home/ben/go_appengine/google/appengine/tools/devappserver2/gcs_server.py", line 56, in __call__

    status_message = httplib.responses.get(e.args[1], '')

IndexError: tuple index out of range

INFO     2014-10-23 19:14:08,693 module.py:652] default: "GET /_ah/gcs/b/default/o/6051711999279104?alt=json HTTP/1.1" 500 -

我可以将浏览器指向此 URL


http://localhost:8080/_ah/gcs/bucket

并得到一个 XML 结果:


<ListBucketResult xmlns="http://doc.s3.amazonaws.com/2006-03-01">

    <IsTruncated>False</IsTruncated>

</ListBucketResult>

我看过几篇关于在本地使用 GCS 的帖子,但我似乎无法让它正常工作。我在这里做错了吗?还是 devappserver 不支持 GCS 或者它只是它不支持的 json api?


绝地无双
浏览 264回答 1
1回答

守着一只汪

我想确保我们清楚“Google APIs Client Library for Go”之间的区别,它是 Go 的通用 Google API 客户端,可用于访问 Google Cloud Storage JSON API,与 App Engine 的“Google Cloud Storage Go Client”,这是一个特定于想要使用 Google Cloud Storage 的 App Engine 用户的客户端库。有两个 Google Cloud Storage API:JSON 和 XML。通用 Google API 客户端库与 JSON API 兼容。App Engine Google Cloud Storage Go Client 使用 XML API。App Engine 客户端库完全支持本地操作。这是通过提供客户端库使用的 Google Cloud Storage XML API 的本地实现来实现的。不幸的是,只有 XML API 存在于本地,因此只有 App Engine 客户端库在本地工作。将另一个客户端指向它会失败,因为 XML API 不理解传入的 JSON API 请求。您的两个最佳选择是执行以下操作之一:使用适用于 App Engine的Google Cloud Storage Go 客户端库。下载说明在这里。不要使用本地实现,而是使用带有测试存储桶的真实 Google Cloud Storage。
随时随地看视频慕课网APP

相关分类

Go
我要回答