我堅持以下情況。這在本地計算機上作業正常,但是 GCP NodeJs 不作業。
問題 - 我有一個使用https://www.npmjs.com/package/qr-image生成 QR 影像的 API ,然后它使用https://www.npmjs.com/package/archiver創建一個 zip 。存檔完成后,它會使用 nodemailer( https://www.npmjs.com/package/nodemailer ) 發送郵件。
現在,為了存盤生成的影像和存檔處理,我正在使用fsNPM 庫。
GCP 配置 - 它是部署節點應用程式的動態/Flexi 應用程式引擎。
mkdir 函式給出了問題。我不想將桶用于簡單的東西。有沒有其他方法,我可以使用現有代碼而不需要調整來使用 nodemail 發送郵件(在歸檔檔案(二維碼)之后)?
嘗試在本地計算機上運行 API。對于使用 mailtrap.io 的郵件測驗,它似乎運行良好。但與 GCP 不同。
很明顯需要一些 GCP 調整或一些 node/express JS 魔法。
觸發錯誤的代碼部分 -
const codesFolder = 'codes';
if (!fs.existsSync(codesFolder)) {
fs.mkdirSync(codesFolder);
}
來自 GCP 日志的錯誤 -
2022-11-13 18:48:58 default[20221113t223118] Processing email
2022-11-13 18:48:58 default[20221113t223118] /workspace/node_modules/mysql/lib/protocol/Parser.js:437
2022-11-13 18:48:58 default[20221113t223118] throw err; // Rethrow non-MySQL errors
2022-11-13 18:48:58 default[20221113t223118] ^
2022-11-13 18:48:58 default[20221113t223118] Error: EROFS: read-only file system, mkdir 'codes' at Object.mkdirSync (node:fs:1382:3) at Query.<anonymous> (/workspace/index.js:243:16) at Query.<anonymous> (/workspace/node_modules/mysql/lib/Connection.js:526:10) at Query._callback (/workspace/node_modules/mysql/lib/Connection.js:488:16) at Query.Sequence.end (/workspace/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24) at Query._handleFinalResultPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:149:8) at Query.EofPacket (/workspace/node_modules/mysql/lib/protocol/sequences/Query.js:133:8) at Protocol._parsePacket (/workspace/node_modules/mysql/lib/protocol/Protocol.js:291:23) at Parser._parsePacket (/workspace/node_modules/mysql/lib/protocol/Parser.js:433:10) at Parser.write (/workspace/node_modules/mysql/lib/protocol/Parser.js:43:10) {
2022-11-13 18:48:58 default[20221113t223118] errno: -30,
2022-11-13 18:48:58 default[20221113t223118] syscall: 'mkdir',
2022-11-13 18:48:58 default[20221113t223118] code: 'EROFS',
2022-11-13 18:48:58 default[20221113t223118] path: 'codes'
2022-11-13 18:48:58 default[20221113t223118] }
App.YAML檔案
runtime: nodejs16
env_variables:
# The following environment variables are set for all instances
# of the app.
NODE_ENV : "production"
uj5u.com熱心網友回復:
有一些混亂。您的帖子說您正在使用 flex env,但您的評論說的是標準 env。
如果您使用的是 Standard,那么您的代碼將無法運行,因為 Standard 不允許您寫入本地磁盤(請參閱Google 檔案)
uj5u.com熱心網友回復:
由于@NoCommandLine 是正確的,之前我的 app.YAML 檔案不包含 env 屬性。
我在 YAML 中使用了 flex 并做了一些調整。更新后的 YAML 如下所示 -
runtime: nodejs
env: flex
env_variables:
# The following environment variables are set for all instances
# of the app.
NODE_ENV : "production"
beta_settings:
# The connection name of your instance, available by using
# 'gcloud beta sql instances describe [INSTANCE_NAME]' or from
# the Instance details page in the Google Cloud Platform Console.
cloud_sql_instances: <<<connection_name>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537187.html
標籤:Google Cloud Collective 节点.js谷歌应用引擎谷歌云平台压缩
