我正在嘗試部署 GCloud App Engine 靈活服務。我有一個 yaml 檔案,其中包含 Node.js 運行時和env指定的。
runtime: nodejs
env: flex
正如檔案所說的“您可以使用engines 欄位在應用程式的package.json 檔案中指定不同的Node.js 版本。”,我還添加了以下內容package.json:
"name": "@bindr/dev",
"version": "1.0.0",
"engines": {
"node": ">=14.0.0"
},
但是,當我運行時gcloud app deploy,出現以下錯誤:
error @bindr/dev@1.0.0: The engine "node" is incompatible with this module. Expected version ">=14.0.0". Got "12.19.0"
似乎部署程序沒有考慮該engines屬性,因為即使我指定了無效版本(例如>=18.0.0),它仍然不會抱怨,只有yarn install失敗。如何讓構建程序使用指定的 Node 版本?
我發現我可以在cloudbuild.yaml構建的某些步驟中指定 Node的版本,如下所示:
steps:
- name: node:node-14.10.0
args: ['predeploy.js', 'content-server']
- name: 'gcr.io/cloud-builders/yarn:node-14.17.1'
args: ['install']
- name: 'gcr.io/cloud-builders/gcloud'
args: ['app', 'deploy']
timeout: '900s'
在此程序中,該yarn install步驟成功,但gcloud app deploy在嘗試安裝依賴項時該步驟仍然失敗(我找不到如何將節點版本指定為gcr.io/cloud-builders/gcloud,它似乎不是這樣的標簽)。
我還檢查了相同的12.19.0版本正在生產實體上運行,因此不僅僅是構建環境具有舊版本。
我究竟做錯了什么?
uj5u.com熱心網友回復:
我遇到了同樣的問題并在這里創建了一個問題。我懷疑這是 Google App Engine 的錯誤,而不是您的應用程式的錯誤。
作為一種解決方法,我最終為我的應用程式使用了自定義運行時。為此,在您的 GAE 組態檔中切換runtime: nodejs到runtime: custom并將一個 Dockerfile 添加到您的專案根目錄。有上寫dockerfile良好的檔案在這里,但這里是一個簡單的,你可以使用:
# syntax=docker/dockerfile:1
FROM node:14.10.0
ENV NODE_ENV=production
WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
CMD [ "node", "server.js" ]
您可能還需要一個.dockerignore至少包含node_modules.
最終,我認為 GAE 修復會更好,因為在 中配置您的節點版本會更簡單package.json,就像您應該能夠做到的那樣。但這應該足以讓事情正常作業并避開似乎是 GAE 錯誤的東西。
uj5u.com熱心網友回復:
所以看看這個檔案,特別注意這一行
engine.node 屬性是可選的,但如果存在,該值必須與 app.yaml 檔案中指定的 Node.js 版本兼容。例如:
我相信默認版本是 12(即runtime: nodejs)以在您的app.yaml檔案集運行時更正此問題,如下所示runtime: nodejs14或更新
另請記住,次要補丁會自動更新,因此您只能指定主要版本,即 14.XX。此外,如果您指定的版本不可用,則構建程序將失敗。
注意:如果您使用云構建cloudbuild.yaml和 flex 環境,您可能會遇到構建錯誤,請移至cloudbuild.yaml其自己的檔案夾以防止出現此錯誤并使用 --config 選項來說明 yaml 的位置。請參閱此檔案以獲取進一步指導
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/328204.html
標籤:节点.js 谷歌应用引擎 谷歌云平台 谷歌云构建 应用引擎灵活
上一篇:使seabornfacet的寬度與沿x軸的資料范圍成正比
下一篇:【前端之旅】HTML 大總結
