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



我们有一个巨大的小节点应用程序,想试用谷歌云部署套件使其上线,但我们的部署总是导致页面出现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/log,但唯一的是有一堆/_ah/background GET,没有我们任何请求的迹象。

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

编辑:这是应用程序引擎面板的屏幕截图。

我们的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个错误,日志中没有可理解的信息。我发现了这个GitHub问题,运行了npm run build,并将app.yaml文件更改为

runtime: nodejs10
handlers:
 - url: /
   static_files: build/index.html
   upload: build/index.html
 - url: /(.*)
   static_files: build/1
   upload: build/(.*)

这就成功了。无论如何,我之所以把这个放在这里,是因为app.yaml和您的构建过程可能是导致500个神秘错误的原因之一。

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

以下是检查Google Cloud 日志的最新命令

gcloud app logs read

最新更新