我在 Go App Engine 应用程序中有一个推送任务队列。当我们出于任何原因尝试将任务排入测试队列时,任务总是返回 404。
我们的 app.yaml:
runtime: go
api_version: go1.9
handlers:
- url: /worker/.*
script: _go_app
login: admin
- url: /.*
script: _go_app
实际的任务调用:
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");
}
一个仍然不完整的处理程序,但它存在!
func Worker(w http.ResponseWriter, r *http.Request) {
ctx := appengine.NewContext(r)
log.Infof(ctx, "Worker succeeded")
}
最后,证明我们实际上添加了路由器的路径:
func init() {
http.HandleFunc("/", Handler)
http.HandleFunc("/worker", Worker)
}
当我们实际运行测试时,我们总是得到以下日志输出:
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
请注意,/worker
当我尝试通过 Paw 等 API 客户端 ping 端点时,端点返回 302,因此路由似乎已正确配置。404 仅在我尝试在测试中运行时出现。
为什么这会返回 404?我已经尝试在他们的文档中围绕示例推送队列运行测试,在那里遇到了同样的问题 - 是否有某种丢失的配置标志我无法传递给goapp
?
我在这里推送了一个带有最小可复制示例的 GitHub 存储库