我在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
请注意,当我尝试通过Paw这样的/worker
客户端对其执行ping操作时,API端点返回302,因此路由似乎已正确配置。只有当我试图在测试中运行东西时,才会出现404。
为什么返回404?我试过在他们的documentation中运行示例推送队列的测试,也遇到了同样的问题--是不是有一些我没有传递给goapp
的配置标志丢失了?
我已经使用一个最小的可复制示例here推送了一个GitHub代码库
发布于 2018-05-08 16:46:44
您的handlers
模式是/worker/.*
,但是您正在向/worker
发出任务。
您应该执行以下操作之一:
向/worker
/worker/some-task-name
.发出
/worker.*
或仅将其发送到/worker/
https://stackoverflow.com/questions/50152164
复制相似问题