设置
在按照问题AppEngine datastore - backup programatically
的未接受的回答后,我遇到了404问题我已根据答案提供商之一的建议启用了数据存储区管理员。我可以在Google App Engine控制台中手动触发数据存储备份,并且备份运行时不会出现任何故障。
此问题中的代码位于名为“app”的模块中。不是'默认'。
404问题
这是cron.yaml中的cron作业。
cron:
- description: Regular backup
url: /_backup/fullbackup
schedule: every 24 hours
url的处理程序会将一个备份任务放入队列,然后再调用
_ah/datastore_admin/backup.create?
gs_bucket_name=%2Fgs%2Ftest.appspot.com%2F21-06-2015&kind=Test&kind=TestContent
&kind=TestDocument&filesystem=gs
(我在这里用'test'替换了我的应用ID)
这会在日志中显示 404 错误。
如果我在浏览器中使用上面的网址和我的应用主机名(即https://test.appspot.com/_ah/datastore_admin/backup.create?
gs_bucket_name=%2Fgs%2Ftest.appspot.com%2F21-06-2015&kind=Test&kind=TestContent
&kind=TestDocument&filesystem=gs
),我也会获得404。
以下是路由/_backup/fullbackup
task = taskqueue.add(
url='/_ah/datastore_admin/backup.create',
method='GET',
target='ah-builtin-python-bundle',
params={
'filesystem': 'gs',
'gs_bucket_name': self.get_bucket_name(),
'kind': (
'Test',
'TestContent',
'TestDocument'
)
}
)
问题:
taskqueue.add
部分中的队列名称?ah-builtin-python-bundle
?修改
已启用datastore-admin内置功能,如此屏幕截图所示。
并且没有dispatch.yaml
答案 0 :(得分:6)
你有enabled the Datastore Admin吗?您需要这样做才能允许模块ah-builtin-python-bundle
存在,这是一个特殊的模块,当您激活数据存储管理员时,它会“部署”到您的应用程序,该管理员真正负责响应对{{1的请求生成从数据存储读取的MapReduce作业,并在云存储中生成备份文件(或者将其发送到的任何地方)。
此外,另一种可能性是您已将/_ah/datastore_admin
硬编码用于您的应用。你拥有那个app id,“测试”吗?从您在浏览器中看到的错误的屏幕截图中,看起来好像您正在尝试备份到存储桶“test.appspot.com
”,这将是应用程序ID为“test”的应用程序的默认存储桶。但是,在您显示的日志屏幕截图中,它还会尝试备份到“test.appspot.com
”存储桶。确保您的应用拥有这些存储桶。
另一种可能性是处理请求的模块不是example.appspot.com
,而是另一个。{1}}。即使您在任务添加方法中指定了不同的目标,如果您有dispatch rule正在重新路由请求,也可能会发生这种情况。
答案 1 :(得分:2)
它与队列配置问题有关。
A'默认'在执行常规备份之前,app.yaml中存在队列定义。因此,备份任务没有达到目标' ah-builtin-python-bundle'
如果我定义一个新队列
- name: data-backup
rate: 1/s
target: ah-builtin-python-bundle
然后使用此代码插入任务,
task = taskqueue.add(
url='/_ah/datastore_admin/backup.create',
method='GET',
queue_name="data-backup",
params={
'filesystem': 'gs',
'gs_bucket_name': self.get_bucket_name(),
'kind': kinds_list # A list of ndb model classes I want to backup
}
)
然后Google应用引擎可以创建备份集