“修订版 <..> 尚未准备好,无法提供流量”

问题描述 投票:0回答:1

我正在努力将 Nodejs 应用程序部署到 Google Cloud Run 上,这是一个用 Express 编写的 REST API 服务器。该应用程序已部署到Cloud Run,并且大约一年没有更新新版本。最近我做了一些修改,想要将新版本部署到 Cloud Run,但遇到错误。

Revision <revision-name> is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable

这是 GCP 日志记录上的错误消息

DEFAULT 2024-05-14T04:11:14.224328Z Error: Cannot find module '../config/firebase'
DEFAULT 2024-05-14T04:11:14.224332Z Require stack:
DEFAULT 2024-05-14T04:11:14.224339Z - /workspace/src/controller/floor.controller.js
DEFAULT 2024-05-14T04:11:14.224344Z - /workspace/src/routes/floor.routes.js
DEFAULT 2024-05-14T04:11:14.224350Z - /workspace/app.js
DEFAULT 2024-05-14T04:11:14.224356Z at Module._resolveFilename (node:internal/modules/cjs/loader:1224:15)
DEFAULT 2024-05-14T04:11:14.224361Z at Module._load (node:internal/modules/cjs/loader:1050:27)
DEFAULT 2024-05-14T04:11:14.224366Z at Module.require (node:internal/modules/cjs/loader:1310:19)
DEFAULT 2024-05-14T04:11:14.224371Z at require (node:internal/modules/helpers:179:18)
DEFAULT 2024-05-14T04:11:14.224403Z at Object.<anonymous> (/workspace/src/controller/floor.controller.js:1:12)
DEFAULT 2024-05-14T04:11:14.224407Z at Module._compile (node:internal/modules/cjs/loader:1480:14)
DEFAULT 2024-05-14T04:11:14.224412Z at Module._extensions..js (node:internal/modules/cjs/loader:1564:10)
DEFAULT 2024-05-14T04:11:14.224416Z at Module.load (node:internal/modules/cjs/loader:1287:32)
DEFAULT 2024-05-14T04:11:14.224421Z at Module._load (node:internal/modules/cjs/loader:1103:12)
DEFAULT 2024-05-14T04:11:14.224426Z at Module.require (node:internal/modules/cjs/loader:1310:19) {
DEFAULT 2024-05-14T04:11:14.224431Z code: 'MODULE_NOT_FOUND',
DEFAULT 2024-05-14T04:11:14.224437Z requireStack: [
DEFAULT 2024-05-14T04:11:14.224442Z '/workspace/src/controller/floor.controller.js',
DEFAULT 2024-05-14T04:11:14.224447Z '/workspace/src/routes/floor.routes.js',
DEFAULT 2024-05-14T04:11:14.224452Z '/workspace/app.js'
DEFAULT 2024-05-14T04:11:14.224457Z ]
DEFAULT 2024-05-14T04:11:14.224461Z }

错误消息说在我的源代码中找不到某些模块。但当我在本地环境中测试服务器时,它按预期运行(当然缺少的模块也在那里)。

我的

package.json
文件看起来像:

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "start": "node ./app.js",
    "deploy": "gcloud run deploy api --allow-unauthenticated --source=.",
    "local-serve": "nodemon app.js"
  },
  "engines": {
    "node": "16"
  },
  "main": "app.js",
  "dependencies": {
    "axios": "^1.3.2",
    "cors": "^2.8.5",
    "crypto-js": "^4.1.1",
    "express": "^4.18.2",
    "firebase-admin": "^10.3.0",
    "firebase-functions": "^4.2.1",
    "http2-express-bridge": "^1.0.7"
  },
  "devDependencies": {
    "@types/jest": "^29.4.0",
    "firebase-functions-test": "^0.2.0",
    "jest": "^29.5.0"
  },
  "private": true
}

我尝试了什么

  • 按照
    this stackoverflow问题
    中的建议在
    "gcp-build":""
    '脚本中添加packaged.json,但仍然遇到相同的错误。
{
  ...,
  "scripts": {
    "start": "node ./app.js",
    "deploy": "gcloud run deploy api --allow-unauthenticated --source=.",
    "local-serve": "nodemon app.js",
    "gcp-build":""
  },
  "engines": {
    "node": "16"
  },
  ...
}
  • 按照故障排除指南,确保服务器正在监听主机
    0.0.0.0
    和环境变量
    PORT
    ,但仍然无法解决问题。
const PORT = process.env.PORT || 3001;
...
...
...
app.listen(PORT, '0.0.0.0', () => console.log(`server listening on port ${PORT}...`));

有人遇到过类似的情况吗?任何提示或建议都非常感谢!

node.js express google-cloud-platform webpack google-cloud-run
1个回答
0
投票

文档中所述,您的容器必须侦听由 Cloud Run 定义并在 $PORT 环境变量中提供的端口上传入的 HTTP 请求。

如果您的容器无法侦听预期端口,则修订版运行状况检查将失败,修订版将处于错误状态,并且流量将不会路由到它。例如,在带有 Express 的 Node.js 中,您应该使用:

// index.js
const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});
// package.json
    "engines": {
        "node": "16.x"
    },
    "scripts": {
        "start": "node index.js"
    },

另请查看@FlightPlan 的Stackoverflow Link,它清楚地解释了端口问题与“容器无法启动”问题。查看他分享的故障排除步骤。

您可能会错过添加所需的依赖项。确保添加与节点版本兼容的所有依赖项。

有时重新启动程序可能需要一些时间。尝试等待几分钟,然后重新启动该程序。

© www.soinside.com 2019 - 2024. All rights reserved.