App引擎推送任务总是在测试中返回404

Ven*_*ius 10 google-app-engine go google-app-engine-go

我在Go App Engine应用程序中有一个推送任务队列.当我们尝试将任务排入测试时,无论出于何种原因,任务总是返回404.

我们的app.yaml:

runtime: go
api_version: go1.9

handlers:
 - url: /worker/.*
   script: _go_app
   login: admin
 - url: /.*
   script: _go_app
Run Code Online (Sandbox Code Playgroud)

实际的任务调用:

func Handler(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    t := taskqueue.NewPOSTTask("/worker", map[string][]string{"key": {"val"}})
    _, err := taskqueue.Add(ctx, t, "")
    if err != nil {
        log.Errorf(ctx, "Failed to add task");
    }
    fmt.Fprintf(w, "Success");
}
Run Code Online (Sandbox Code Playgroud)

一个仍然不完整的处理程序,但它存在!

func Worker(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    log.Infof(ctx, "Worker succeeded")
}
Run Code Online (Sandbox Code Playgroud)

最后,证明我们实际上已经添加了路由器的路径:

func init() {
    http.HandleFunc("/", Handler)
    http.HandleFunc("/worker", Worker)
}
Run Code Online (Sandbox Code Playgroud)

当我们实际运行测试时,我们总是得到以下日志记录输出:

INFO     2018-05-03 09:51:11,794 module.py:846] default: "POST /worker HTTP/1.1" 404 19
WARNING  2018-05-03 09:51:11,794 taskqueue_stub.py:2149] Task ? failed to execute. This task will retry in 0.100 seconds
INFO     2018-05-03 09:51:11,897 module.py:846] default: "POST /worker HTTP/1.1" 404 19
WARNING  2018-05-03 09:51:11,897 taskqueue_stub.py:2149] Task ? failed to execute. This task will retry in 0.200 seconds
INFO     2018-05-03 09:51:12,101 module.py:846] default: "POST /worker HTTP/1.1" 404 19
WARNING  2018-05-03 09:51:12,101 taskqueue_stub.py:2149] Task ? failed to execute. This task will retry in 0.400 seconds
Run Code Online (Sandbox Code Playgroud)

请注意,/worker当我尝试通过像Paw这样的API客户端ping它时,端点返回302,因此路径似乎已正确配置.只有当我尝试在测试中运行时才会出现404.

为什么这会回归404?我已经尝试在示例推送队列中运行测试,在他们的文档中遇到了同样的问题 - 是否有某种缺少的配置标志我没有传递给它goapp

我推了一个GitHub库用最小的复制例子在这里

Ale*_*nok 3

您的handlers模式是/worker/.*,但您正在向 发出任务/worker

您应该执行以下操作之一:

  1. 将模式更改为/worker.*或只是/worker
  2. /worker/或者向或发出请求/worker/some-task-name