如何控制在应用程序引擎中运行任务队列上的哪些版本作业?

时间:2013-08-13 23:52:34

标签: google-app-engine version task-queue

Google App Engine中的任务队列上的作业是自动放在默认后端还是在后端版本上安排调用它们的代码?

假设我有两个后端称为“测试”,另一个称为“生产”,其中“生产”是我的默认版本。

在每一个中,我都有一个文件如下:

from google.appengine.api import taskqueue
import webapp2

class QueueScheduler(webapp2.RequestHandler):
    def get(self): #in real life, post, but this makes for an easier example
        taskqueue.add('path/to/myTask')

app = webapp2.WSGIApplication(('/myScheduler',QueueScheduler))

当我打电话给test.myApp.appspot.com/myScheduler时,我会创建指向test.myApp.appspot.com/path/to/myTask的任务,还是创建myApp.appspot.com/path/to/myTask的任务(即production.myApp.appspot.com/path/to/myTask

我有办法从代码中控制它吗?假设我有一个名为“队列”的第三个后端。我是否可以通过某种方式更改上述代码,以便调用test.myAppp.appspot.com/mySchedulerproduction.myApp.appspot.com/mySchedulerqueues.myApp.appspot.com/myScheduler all将生成一个任务,通过转到{{1}来调用已达到的代码同时将'production'保留为默认的后端版本?

元: 如果它很重要,我正在处理的特殊问题是我的公司为我们的移动应用程序使用不同版本的代码而不是我们对Web应用程序的代码。我们将版本号硬编码到我们的应用程序中,以便在我们发布更新时将应用程序指向默认版本,以便我们可以进行向后不兼容的修订。在我们更新用户看到的界面之前,我们还经常需要更新数据处理。我正在寻找一种解决方案,允许我们这样做,而无需确保我们没有修改我们的数据处理,而我们已经部分完成对接口的更改或同时处理我们代码的多个分支。我们希望调用我们应用程序的默认版本和旧版本,以便能够在尚未准备好面向客户端的版本上完成数据处理。在cron.yaml中创建任务并在那里设置版本解决了我们必须保留的所有数据的问题,但对于某些事情,我们宁愿在多个分支中开发编程开销,而不是保持不存在的问题。数据实时。

2 个答案:

答案 0 :(得分:3)

此添加功能的文档实际上可以更好地处理这个确切的主题。

https://developers.google.com/appengine/docs/python/taskqueue/functions#add

target参数允许您控制使用的版本,因此您可以在代码中设置一次,并将其应用于您已部署的所有版本,这正是我在询问时所寻求的版本问题

简而言之,默认情况下,任务在后端运行启动任务的URL,但是可以从代码控制任务队列运行的应用程序版本。为此,只需致电taskqueue.add('/relative/path/to/task',target='queues')

答案 1 :(得分:-3)