jjzjj

google-app-engine - Google Appengine 云任务 alpha 处理程序 http 404 错误

coder 2023-07-01 原文

当我将任务发送到任务队列时,它一直失败并在日志中显示 http 404(未找到)错误。

该项目已被列入灵活的云任务 alpha 白名单。

我可以在本地将 HTTP post 请求发送到/endpointpath 和/tasks/worker 而不会出现任何错误。

端点工作正常,并将任务添加到任务队列中。

 13:37:41.300 POST 200 0 B 422 ms curl/7.54.0 /endpointspath?key=keyremoved 0.0.0.0 - "POST endpointspath?key=keyremoved" 200 undefined "-" "curl/7.54.0"

该应用程序作为默认服务运行。

app.go 主要功能:

func main() {
    r := mux.NewRouter()

    r.HandleFunc("/", handler)

    r.HandleFunc("/_ah/health", healthCheckHandler)

    // Task handlers

    r.Path("/tasks/worker").Methods("POST", "GET", "PUT").HandlerFunc(workerTaskHandler)

    // Endpoints

    r.Path("/endpointpath").Methods("POST").HandlerFunc(searchHandler)

    http.Handle("/", r)

    port := 8080
    if portStr := os.Getenv("PORT"); portStr != "" {
        port, _ = strconv.Atoi(portStr)
    }
    log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", port), nil))
}

缩写的 app.yaml:

runtime: go
env: flex

handlers:
- url: /tasks/.*
  script: _go_app
- url: /.*
  script: _go_app

当队列向 worker 发送请求时记录 HTTP 404 响应:

10.0.0.1 - "POST /tasks/worker" 404 200 "-" "AppEngine-Google; (+http://code.google.com/appengine)"
Expand all | Collapse all {
 httpRequest: {
  latency:  "0s"    
  referer:  "-"    
  remoteIp:  "10.0.0.1"    
  requestMethod:  "POST"    
  requestUrl:  "/tasks/worker"    
  responseSize:  "200"    
  status:  404    
  userAgent:  "AppEngine-Google; (+http://code.google.com/appengine)"    
 }
 insertId:  "......."   
 jsonPayload: {
  appLatencySeconds:  "-"    
  latencySeconds:  "0.000"    
  time:  null    
  trace:  "......."    
 }
 labels: {
  appengine.googleapis.com/instance_name:  "......"    
  appengine.googleapis.com/trace_id:  "......."    
  compute.googleapis.com/resource_id:  "......."    
  compute.googleapis.com/resource_name:  "......"    
  compute.googleapis.com/zone:  "us-central1-b"    
 }
 logName:  "projects/projectname/logs/appengine.googleapis.com%2Fnginx.request"   
 receiveTimestamp:  "2017-12-09T10:56:14.794726383Z"   
 resource: {
  labels: {
   module_id:  "default"     
   project_id:  "projectname"     
   version_id:  "....."     
  }
  type:  "gae_app"    
 }
 timestamp:  "2017-12-09T10:56:10.301Z"   
}

我可以让 GAE 找到任务/工作人员 url 的最接近方法是在 app.yaml 中设置 login:admin(即使 flex 不使用它进行身份验证)。这将返回 403 未经授权的错误。

handlers:
- url: /tasks/.*
  script: _go_app
  login: admin

这是日志中的 403 响应

{
 httpRequest: {
  latency:  "0s"    
  referer:  "-"    
  remoteIp:  "10.0.0.1"    
  requestMethod:  "POST"    
  requestUrl:  "/tasks/worker"    
  responseSize:  "162"    
  status:  403    
  userAgent:  "AppEngine-Google; (+http://code.google.com/appengine)"    
 }
 insertId:  "....."   
 jsonPayload: {
  appLatencySeconds:  "-"    
  latencySeconds:  "0.000"    
  time:  null    
  trace:  "....."    
 }
 labels: {
  appengine.googleapis.com/instance_name:  "...."    
  appengine.googleapis.com/trace_id:  "...."    
  compute.googleapis.com/resource_id:  "...."    
  compute.googleapis.com/resource_name:  "....."    
  compute.googleapis.com/zone:  "us-central1-b"    
 }
 logName:  "projects/projectname/logs/appengine.googleapis.com%2Fnginx.request"   
 receiveTimestamp:  "2017-12-09T13:35:59.986118082Z"   
 resource: {
  labels: {
   module_id:  "default"     
   project_id:  "projectname"     
   version_id:  "....."     
  }
  type:  "gae_app"    
 }
 timestamp:  "2017-12-09T13:35:54.764Z"   
}

不确定是否相关,但 projectname.appspot.com/_ah/health 返回此错误:

{
 "code": 5,
 "message": "Method does not exist.",
 "details": [
  {
   "@type": "type.googleapis.com/google.rpc.DebugInfo",
   "stackEntries": [],
   "detail": "service_control"
  }
 ]
}

最佳答案

事实证明,端点不能与任务处理程序在同一服务上运行。如果任务处理程序 url 请求在灵活环境中的同一服务上运行,并且该服务启用了端点服务,则 ESP 代理会阻止它们。

在单独的服务上运行任务处理程序,不要在任务处理程序服务 app.yaml 文件中设置“endpoints_api_service:”。

这样做会阻止队列在灵活的环境中分配给工作人员。

App Engine 文档中没有提到这有点奇怪。

“/_ah/health”问题是由于未在打开的 api 文件中设置此路径引起的。如果未设置此路径,则代理无法识别 url。

关于google-app-engine - Google Appengine 云任务 alpha 处理程序 http 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47729295/

有关google-app-engine - Google Appengine 云任务 alpha 处理程序 http 404 错误的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  3. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  4. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  5. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  6. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  7. ruby - Net::HTTP 获取源代码和状态 - 2

    我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur

  8. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  9. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  10. ruby-on-rails - 为什么在安装 Ruby 1.9.3 时出现 404 错误? - 2

    我最近对我的计算机(OS-MacOSX10.6.8)进行了删除,并且我正在重新安装我所有的开发工具。我再次安装了RVM;但是,它不会让我安装Ruby1.9.3。到目前为止我已经尝试过:rvminstall1.9.3rvm安装1.9.3-p194rvm安装1.9.3-p448rvminstall1.9.3--with-gcc=clang所有返回相同的命令行错误:Searchingforbinaryrubies,thismighttakesometime.Nobinaryrubiesavailablefor:osx/10.6/x86_64/ruby-1.9.3-p448.Continuin

随机推荐