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

时间:2014-10-23 19:41:19

标签: google-app-engine go google-cloud-storage google-compute-engine

我正在编写一个将在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存储。

我正在通过goapp serve'运行devappserver。与我的GAE申请。

我尝试过设置基路径,导致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 -

我可以将浏览器指向此网址

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?

1 个答案:

答案 0 :(得分:2)

我想确保我们清楚“Google API Client for Go”之间的区别,这是Go的通用Google API客户端,可用于访问Google Cloud Storage JSON API,和App Engine的“Google Cloud Storage Go Client”,这是一个特定于想要使用Google云端存储的App Engine用户的客户端库。

有两种Google云端存储API:JSON和XML。通用Google API客户端库与JSON API兼容。 App Engine Google Cloud Storage Go客户端使用XML API。

App Engine客户端库完全支持本地操作。这是通过提供客户端库使用的Google云存储XML API的本地实现来实现的。遗憾的是,本地只存在XML API,因此只有App Engine客户端库在本地运行。将其他客户端指向它将失败,因为XML API无法理解传入的JSON API请求。

您最好的两个选择是执行以下操作之一:

  1. Google Cloud Storage Go Client Library用于App Engine。下载说明为here
  2. 不使用本地实施,而是使用带有测试存储区的真实Google云端存储。