【问题标题】:App Engine: Copy live Datastore to local dev Datastore (that still works)App Engine:将实时数据存储复制到本地开发数据存储(仍然有效)
【发布时间】:2016-09-01 00:40:25
【问题描述】:

过去,这可以通过使用批量加载程序下载并上传到本地开发服务器来实现。但是,由于不支持 oauth2,bulkloader 下载几个月以来一直无法使用。

一些地方建议从云存储备份下载,然后通过bulkloader 或直接解析备份上传到本地数据存储。但是,这些都不再起作用。 bulkloader 方法抛出:

OperationalError: unable to open database file

并且用于读取备份文件的 RecordsReader 类在尝试读取第一条记录时到达文件末尾,导致没有记录被读取。

是否存在将实时数据存储复制到本地开发数据存储的当前有效方法?

【问题讨论】:

    标签: google-app-engine google-cloud-storage google-cloud-datastore


    【解决方案1】:

    bulkloader 在带有 OAuth2 的 Python 上仍然可以使用,尽管有一些警告。在从实时应用下载时,刷新 OAuth2 令牌存在问题,因此总下载时间限制为 3600 秒,如果您手动使用带有 --oauth2_refresh_token 的刷新令牌,则为 3600+3600。

    上传到开发服务器应用程序时,OAuth2 将失败并显示 401,因此有必要编辑 google.appengine.ext.remote_api.handler 并删除“CheckIsAdmin”以始终返回 True 作为解决方法:

    def CheckIsAdmin(self):
      return True
      user_is_authorized = False
      ...
    

    不过,我赞成上述答案,因为在这一点上它看起来是一个更强大的解决方案。

    【讨论】:

      【解决方案2】:

      RecordsReader 在 unix 上运行良好。一天前我试过这个https://gist.github.com/jehna/3b258f5287fcc181aacf,效果很好。

      您应该将您的 Kinds 实现添加到导入中并在数据存储交互式 shell 中运行它。 例如: 从 myproject.kinds_implementations 导入 MyKind 我已经删除了

      for pp in dir(a): try: ppp = getattr(a, "_" + pp) if isinstance(ppp, db.Key): ppp._Key__reference.set_app(appname) ppp except AttributeError: """ It's okay """

      而且效果很好。在我的情况下,备份下载在多个目录中,所以我修改了对目录的访问。对于这样的事情:

      for directory in mypath: full_directory_path = join(mypath, directory) for sub_dir in listdir(directory_full_path): full_sub_dir_path = join(full_directory_path, sub_dir) onlyfiles = [ f for f in listdir(full_sub_dir_path) if isfile(join(mypath,f)) ] for file in onlyfiles:

      如果你在 windows 上工作,欢迎关注我关于 windows 上 RecordsReader 的问题,希望有人会在那里回答Google datastore backup to local dev_appserver

      编辑: 如果您将文件打开权限从“r”更改为“rb”,则在 Windows 上工作得很好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多