GAE数据存储还原停止与API调用urlfetch.获取()响应时间过长,已取消

2024-09-30 12:13:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我遵循这个指南https://cloud.google.com/appengine/docs/python/console/datastore-backing-up-restoring#restoring_data_to_another_app 介绍如何在一个GAE应用程序中备份数据,并在另一个应用程序中恢复数据。在

但每次在目标应用程序上恢复备份时,都会出现错误:

The API call urlfetch.Fetch() took too long to respond and was cancelled.

你知道我做错了什么吗?在


Tags: to数据httpscom应用程序clouddocsgoogle
1条回答
网友
1楼 · 发布于 2024-09-30 12:13:41

你的urlfetch.获取()的响应时间太长(超过60秒),因此超时。这是一篇关于它的文章https://cloud.google.com/appengine/articles/deadlineexceedederrors

一种解决方案是使用任务队列。任务队列的超时时间更长,或者更恰当地说,允许您将作业分割成更小的部分。 https://cloud.google.com/appengine/docs/python/taskqueue/

下面是一个简单的示例,演示如何使用“推送”任务队列来完成此操作。我意识到从一个数据存储模型转换到另一个可能不是您想要的冗余。您可能希望将数据存储实体完全备份到另一个应用程序或其他类型的数据库或云服务。您还可能有多个模型正在备份。这只是一个使用cron作业每隔24小时设置和调度“推送”任务队列的简单示例:

首先,您必须在应用程序yaml公司名称:

builtins:
- deferred: on

接下来,您需要创建第二个数据存储模型,我们将其称为“备份”,只需复制粘贴旧模型并将其重命名为“备份”-使用同一模型的相同版本而不是同一模型有助于备份,因为您可以为相同的主数据和备份提供相同的密钥:

^{pr2}$

下一步在您的克罗恩·亚姆公司名称:

- description: Creates a backup of the target db every 24 hours at 10:45 GMT
url: /backup
schedule: everyday 10:45

添加/备份到应用程序yaml处理程序:

- url: /backup
script: mybackup.py
login: admin

最后,创建我的备份.py在

from google.appengine.ext import deferred
from google.appengine.ext import db
#from google.appengine.ext import ndb

def backup_my_model(model_name):
    """
    Takes all enities in the model_name model and copies it to Backup model
    """
    logging.info("Backing up %s" % model_name)
    query = db.GqlQuery('SELECT * From %s ' % model_name)
    for primary_db in query:
        backup = Backup(key_name = primary_db.key_name)
        backup.prop1 = primary_db.prop1
        backup.prop2 = primary_db.prop2
        ...
        backup.put()



deferred.defer(backup_my_model, MyModel) #where MyModel is the model you want to backup
deferred.defer(backup_my_model, MyOtherModel)
...
deferred.defer(backup_my_model, MyFinalModel)

我希望这有帮助。在

相关问题 更多 >

    热门问题