使用 GSUtil 在本地加载文件

Posted

技术标签:

【中文标题】使用 GSUtil 在本地加载文件【英文标题】:Loading Files Locally Using GSUtil 【发布时间】:2015-04-26 23:17:48 【问题描述】:

有谁知道将一组文件本地加载到 Java dev_appserver 的模拟云存储的好方法。

这不起作用:

$ gsutil rsync gs://mybucket http://localhost:8888/mybucket
InvalidUrlError: Unrecognized scheme "http".

我愿意接受以下任一方面的建议:

    如何在本地加载一堆文件(最好通过 gsutil) 如何将我的本地 dev_appserver 指向 Google 的非模拟存储桶

在没有适当数据的情况下在本地进行测试是很痛苦的。我正在尝试编写一些转换以将数据加载到 BigQuery(来自 Datastore 备份),如果没有一些真实数据,这将是不可能的。

【问题讨论】:

rsyncgsutil rsync -d /localdirgs://mybucket/data将数据复制到本地目录。 本地副本不是问题,我需要的是一种将其加载到我的 dev_appserver 的方法。 dev_appserver**.py** 可以通过命令行标志被告知用于本地文件的目录——但是,我对 Java 的了解还不够,无法提供帮助。 【参考方案1】:

“如何将我的本地 dev_appserver 指向 Google 的非模拟存储桶”:它没有清楚地记录,但它dev_appservercloudstorage 中实现。

要验证我的意思,首先svn checkout http://appengine-gcs-client.googlecode.com/svn/trunk/python gcs-client 将cloudstorage 的源代码安装到您的计算机上(如果您还没有安装subversion,则需要安装它,但是,这也是免费的:-) .

然后,cd gcs-client/src/cloudstorage/ 并查看 storage_api.py。在第一个函数_get_storage_api 中,文档字符串说:

On dev appserver, this instance by default will talk to a local stub
unless common.ACCESS_TOKEN is set. That token will be used to talk
to the real GCS.

所以,看看common.py,再看看第一个函数set_access_token,你会看到:

参数: access_token:您可以通过运行“gsutil -d ls”并复制 str 在“承载”之后。

因此,您在应用程序的每个条目中(最好在根目录中的 appengine_config.py 中)导入 cloudstoragecommon 模块,然后**当且仅当您在 dev_appserver 上时[*] 调用

common.set_access_token('whatever_the_token')

使用你通过运行'gsutil -d ls'得到的字符串作为参数字符串,在Bearer之后,即你会发现类似的东西(伪造和缩短实际值的方式......:-):

Bearer xy15.WKXJQEzXPQQy2dt7qK9\r\n

在这种情况下你会打电话

common.set_access_token('xy15.WKXJQEzXPQQy2dt7qK9')

[*] 有多种方法可以确定您是否在 dev_appserver,例如查看 GAE: python code to check if i'm on dev_appserver or deployed to appspot。

【讨论】:

感谢 Alex 的快速回复,非常感谢。我确实找到了 Python 的先前答案,但没有找到 Java。抱歉,如果这在我的问题中令人困惑,我试图将其加粗以使其清楚。你知道 Java SDK 也一样吗? @BK-,抱歉,我的 Java 很弱——拥有强大 Java 的人肯定能够在 Java SDK 的源代码中找到类似的方法,就像我在 Python SDK 的源代码中所做的那样!如果您想要 Java 答案,请将 Java 添加到您的标签中——这样,我们这些对 Java 知之甚少而无法提供帮助的人会知道不会尝试帮助您... 感谢亚历克斯的建议。添加了标签! :-) @BK- 当你说你找到了 python 的答案时,这是你的第二个问题,还是你的第一个问题?我还想在我的开发应用服务器上预加载一些 GCS 数据,但找不到方法。 都没有回答。对不起! :(

以上是关于使用 GSUtil 在本地加载文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 gsutil 复制文件后,它们不会立即从本地存储中删除

gsutil rsync 在 gzip/非 gzip 本地/云位置之间同步

如果不存在文件,则处理 gsutil ls 和 rm 命令错误

Electron加载本地文件

使用 STDIN 的“gsutil rm”命令

在 webView 上加载本地存储的文件时延迟