Go App Engine推送任务测试时始终返回404问题求助
解决Go App Engine推送任务队列404错误的方案
嘿,我一眼就瞅出问题大概率出在哪了——你的任务请求路径和app.yaml里的路由规则不匹配!让我给你拆解清楚:
核心问题:路由规则与任务路径不对应
你在代码里创建的任务是POST到/worker路径:
t := taskqueue.NewPOSTTask("/worker", map[string][]string{"key": {"val"}})
但你的app.yaml里配置的worker路由是/worker/.*,这个规则只匹配以/worker/开头的路径(比如/worker/handle-task),而/worker本身并不符合这个规则,导致请求会落到下面的/.*路由里。如果你的代码没给/worker注册对应的POST处理器,自然就返回404了。
两种修复方案,选一个就行:
方案1:调整任务路径匹配现有路由
把任务的目标路径改成符合/worker/.*规则的格式,比如:
t := taskqueue.NewPOSTTask("/worker/process", map[string][]string{"key": {"val"}})
同时确保你的Go代码里注册了对应的POST处理器:
func init() { http.HandleFunc("/worker/process", WorkerHandler) } func WorkerHandler(w http.ResponseWriter, r *http.Request) { // 这里写你的任务处理逻辑 }
方案2:修改路由规则匹配/worker路径
如果不想改动任务路径,就把app.yaml里的worker路由改成能匹配/worker及其子路径的规则:
handlers: - url: /worker(/.*)? script: _go_app login: admin - url: /.* script: _go_app
这个正则/worker(/.*)?会同时匹配/worker和所有/worker/xxx格式的路径,这样原任务的/worker就能正确命中路由了。
额外提醒
- 确认你的
WorkerHandler确实注册了对应路径,并且没有限制请求方法(如果做了方法校验,记得放开POST请求) login: admin配置是没问题的,App Engine任务队列的请求会自动携带管理员身份,不会因为权限问题返回404,核心问题还是路由匹配的锅
内容的提问来源于stack exchange,提问作者Venantius
相关产品推荐
相关产品推荐

