404尝试在Google App Engine项目中创建备份时

时间:2015-06-22 00:35:29

标签: python google-app-engine cron backup

设置

在按照问题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 错误。

enter image description here

如果我在浏览器中使用上面的网址和我的应用主机名(即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。

enter image description here

以下是路由/_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'
            )
        }
    )

问题:

  • 问题的原因是什么?
  • 我是否需要python代码的taskqueue.add部分中的队列名称?
  • 在我的cron.yaml中,我是否需要将目标设置为ah-builtin-python-bundle

修改

已启用datastore-admin内置功能,如此屏幕截图所示。

并且没有dispatch.yaml

enter image description here

2 个答案:

答案 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应用引擎可以创建备份集