【问题标题】:Debugging a node app on gcloud to fix 500 server error在 gcloud 上调试节点应用程序以修复 500 服务器错误
【发布时间】:2016-09-10 02:48:08
【问题描述】:

我们有一个庞大的小节点应用程序,并想试用谷歌云部署套件以使其上线,但是我们的部署总是导致页面出现 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.

查看响应标头并没有提供更多信息,所以我浏览了堆栈驱动程序/日志,但唯一的事情是一堆 /_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",
  },

【问题讨论】:

  • 介意分享您的 App Engine 仪表板屏幕截图吗?
  • 没问题,你是这个意思吗? i.imgur.com/fVxeT1k.png?1
  • 首先,在 1 个实例而不是 20 个实例上对其进行测试。:D 接下来将您的 server-pod 任务更改为 "server-prod": "NODE_ENV=production node index.js",,它应该可以工作。
  • @komali_2,你的问题解决了吗?
  • @kamran 我已经解决了我们在服务器上遇到的问题(编译时间太长,所以进程退出了),但是,我们完全靠运气发现了这一点。我仍然不确定在 gcloud 上调试节点应用的最佳方式。

标签: node.js google-app-engine google-compute-engine gcloud gcloud-node


【解决方案1】:

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

【讨论】:

  • 运行你的命令 yields 'ERROR: (gcloud) Invalid selection: 'preview'.'
  • 您现在可以删除“预览”了 :)
【解决方案2】:

很明显,Node 应用程序可能出现的一个问题是您没有运行生产版本。我刚从 Heroku 来到 GCP,Heroku 为我的 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/\1
   upload: build/(.*)

这就是诀窍。无论如何,我只是把它放在这里,因为 app.yaml 和您的构建过程可能是神秘 500 错误的原因之一。

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

【讨论】:

    【解决方案3】:

    这是在 Google Cloud 上检查日志的最新命令

    gcloud app logs read
    

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2019-08-06
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2017-01-28
      相关资源
      最近更新 更多