以前可以通过批量加载程序下载并上传到本地开发服务器。然而,由于不支持oauth2,批量加载器下载已经几个月不起作用了。
一些地方建议从云存储备份下载,并通过批量加载程序或直接解析备份上传到本地数据存储。然而,这两个似乎都不再起作用了。bulkloader方法抛出:
OperationalError: unable to open database file而用于读取备份文件的RecordsReader类在尝试读取第一条记录时到达文件末尾,导致没有任何记录被读取。
是否存在用于将实时数据存储区拷贝到本地开发数据存储区的当前有效方法?
发布于 2016-05-13 15:35:24
RecordsReader在unix上运行良好。我一天前试过这个https://gist.github.com/jehna/3b258f5287fcc181aacf,它工作得很棒。
您应该添加到imports your Kind实现中,并在数据存储交互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上工作得很好。
发布于 2016-05-22 05:08:36
批量加载器仍然可以在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
...然而,我支持上面的答案,因为在这一点上它看起来是一个更健壮的解决方案。
https://stackoverflow.com/questions/37063925
复制相似问题