在 gcloud 上调试节点应用程序以修复 500 服务器错误
Debugging a node app on gcloud to fix 500 server error
我们有一个庞大的小节点应用程序,想试用 google 云部署套件以使其上线,但是我们的部署总是导致页面出现 500 服务器错误。
通常我会提供更多信息、错误等,但我希望更有知识的人可以指导我在哪里可以找到这些信息。当我们 gcloud preview app deploy
时,gcloud 终端中没有任何注意事项出现,只有一堆 preparing
和 pushing
以及最后的 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
我们有一个庞大的小节点应用程序,想试用 google 云部署套件以使其上线,但是我们的部署总是导致页面出现 500 服务器错误。
通常我会提供更多信息、错误等,但我希望更有知识的人可以指导我在哪里可以找到这些信息。当我们 gcloud preview app deploy
时,gcloud 终端中没有任何注意事项出现,只有一堆 preparing
和 pushing
以及最后的 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