【问题标题】:Google cloud datastore emulator init data谷歌云数据存储模拟器初始化数据
【发布时间】:2018-08-13 09:59:41
【问题描述】:

我想将谷歌云数据存储模拟器用于本地项目。我已经安装并运行了模拟器:

gcloud beta emulators datastore start

我的应用程序连接到它,但问题是我不知道如何用实体填充它,因为没有用户界面并且我的应用程序需要一些管理员用户在场。

我还尝试使用以下命令导出生产数据库(数据存储区):

 gcloud datastore export

但无法让它工作。

我应该编写一个以编程方式填充数据库的独立 js/python 脚本吗?

请指教

【问题讨论】:

    标签: google-cloud-datastore datastore


    【解决方案1】:

    模拟器会在您的本地机器上创建一个“Datastore”,它基本上模拟了行为,就好像它是 Google Cloud Datastore 本身一样。

    因此,如果您已经在运行模拟器并且您的应用连接到它,只需使用连接到 Datastore 的任何脚本,您就可以执行任何读/写操作。所以举个例子,如果你使用这个python-datastore github repo:

    代码在每个“用户的 ip”和“时间戳”访问您的应用时插入实体,然后查询最近 10 次访问:

    entity = datastore.Entity(key=ds.key('visit'))
    entity.update({
        'user_ip': user_ip,
        'timestamp': datetime.datetime.utcnow()
    })
    
    ds.put(entity)
    
    query = ds.query(kind='visit', order=('-timestamp',))
    
    results = [
        'Time: {timestamp} Addr: {user_ip}'.format(**x)
        for x in query.fetch(limit=10)]
    
    output = 'Last 10 visits:\n{}'.format('\n'.join(results))
    

    因此,如果您使用模拟器运行您的应用程序,这些所有实体都将插入本地并从那里查询。如果你停止模拟器然后再次运行它,你会看到类似:

    重用 [/tmp/tmp.(whatever)/emulators/datastore] 中的现有数据

    所以你将能够继续使用相同的数据,除非你删除它或更改模拟器的数据目录changing the --data-dir flag

    如果你运行以下命令:

    gcloud 数据存储导出

    First of all you are missing the OUTPUT_URL_PREFIX;您的数据存储将被导出到哪里。其次,此命令尚不具备与本地数据存储一起使用的功能:您可以看到以下public issue tracker 已被请求的位置。

    如您在the answer and edit by @Olivier.Roger and @stanzheng in the following thread 中所见,有一种方法可以将您的生产数据存储导出到本地数据存储。您必须按照以下步骤操作:

    1.部署一些使用remote_api运行的应用程序。例如this repo 是一种直截了当的方式。

    2.运行此命令将生产中的数据存储下载到文件 data.csv:

    appcfg.py download_data -A YOUR_APP_NAME --url=http://YOUR_APP_NAME.appspot.com/_ah/remote_api/ --filename=data.csv
    

    3.启动数据存储模拟器:

    gcloud beta emulators datastore start
    

    4. 使用相同的remote_api repo than before 运行the Local Development Server。当你运行它时,你会看到类似的东西:

    启动 API 服务器:http://0.0.0.0:39693

    在接下来的步骤中使用最后一个端口(39693)

    5.运行以下命令:

    appcfg.py --url=http://localhost:39693/_ah/remote_api/ --filename=data.csv upload_data
    

    在最后一步中,您实际上正在执行以下操作:您正在将 data.csv 上传到在本地运行的应用程序。考虑到您也在运行数据存储模拟器,您在本地运行的应用程序已连接到它,因此您将 data.csv 上传到本地数据存储。

    【讨论】:

    • 多么完美且有据可查的答案!谢谢楼主!
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多