在 gcloud 上调试节点应用程序以修复 500 服务器错误

Debugging a node app on gcloud to fix 500 server error

我们有一个庞大的小节点应用程序,想试用 google 云部署套件以使其上线,但是我们的部署总是导致页面出现 500 服务器错误。

通常我会提供更多信息、错误等,但我希望更有知识的人可以指导我在哪里可以找到这些信息。当我们 gcloud preview app deploy 时,gcloud 终端中没有任何注意事项出现,只有一堆 preparingpushing 以及最后的 deployed module [default] to ... 消息。然而,导航到 URL 给我们一个 500 服务器错误:

Error: Server Error

The server encountered an error and could not complete your request.
Please try again in 30 seconds.

查看响应头并没有提供更多信息,所以我浏览了 stackdriver/logs,但唯一的是一堆 /_ah/background GET 没有签署我们的任何要求。

我们可以从哪里开始调试这个问题?它是一个具有 node/express 后端、React 前端和 webpack 构建器的节点应用程序。

编辑:这是应用引擎仪表板的 screenshot

我们的app.yaml

runtime: nodejs
vm: true

skip_files:
  - ^(.*/)?.*/node_modules/.*$

我们的package.json:

  "scripts": {
    "test": "karma start",
    "watch": "watch 'npm run test' client/",
    "clean": "rm -rf dist",
    "webpack-prod": "NODE_ENV=production webpack --progress -p",
    "server-prod": "NODE_ENV=production node ./index.js",
    "prestart": "npm run webpack-prod",
    "start": "npm run server-prod",
  },

将来,gcloud preview app logs read 会在此处为您提供日志,显示进程崩溃的原因(假设这就是问题所在)。作为部署的一部分,我们正在努力解决这些错误。

显然,Node 应用程序可能出现的一个问题是您不是 运行 生产版本。我刚从 Heroku 来到 GCP,他自动为我的 React 应用程序创建生产构建。我从 GCP 收到 500 个错误,日志中没有可理解的信息。我找到 this GitHub issue、运行 npm run build,并将我的 app.yaml 文件更改为

runtime: nodejs10

handlers:
 - url: /
   static_files: build/index.html
   upload: build/index.html

 - url: /(.*)
   static_files: build/
   upload: build/(.*)

这就成功了。不管怎样,我把它放在这里是因为 app.yaml 并且您的构建过程可能是神秘 500 错误的原因之一。

编辑:只是为了不误导任何人,如果你想在 React 应用程序中支持多路由,你实际上需要一个 app.yaml 文件看起来更像是 this 问题中的那个(是的, 问题;它自己回答)。

这是在 Google Cloud

上检查日志的最新命令
gcloud app logs read