我在Google Cloud App Engine上运行了node js服务器服务。 我在项目的 assets 文件夹中有 JSON 文件,需要通过进程进行更新。 我能够读取文件和文件中的配置。但是当添加文件时,从 GAE 收到只读服务错误。
有没有办法在不使用云存储选项的情况下将信息写入文件?
这是一个非常小的文件,使用云存储的东西将使用一台非常大的钻机作为内六角扳手螺钉
谢谢
不,在 App Engine Standard 中没有这样的文件系统。在文档中,提到了以下内容:
运行时包括一个完整的文件系统。文件系统是只读的,但位置/tmp 除外,该位置是将数据存储在 App Engine 实例的 RAM 中的虚拟磁盘。
因此,考虑到这一点,您可以写/tmp
但我建议使用云存储,因为如果扩展关闭所有实例,数据将丢失。
你也可以想到App Engine Flex,它提供HDD(因为它的后端是VM(,但最小大小为10GB,因此它将比使用存储更糟糕。
曾经感谢您指导我不要浪费时间为该问题寻找黑客解决方案。
无论如何,没有明确的代码如何使用/tmp 目录并使用应用程序引擎托管节点.js应用程序下载/上传文件。 如果有人需要,这是代码
const {
Storage
} = require('@google-cloud/storage');
const path = require('path');
class gStorage {
constructor() {
this.storage = new Storage({
keyFile: 'Please add path to your key file'
});
this.bucket = this.storage.bucket(yourbucketname);
this.filePath = path.join('..', '/tmp/YourFileDetails');
// I am using the same file path and same file to download and upload
}
async uploadFile() {
try {
await this.bucket.upload(this.filePath, {
contentType: "application/json"
});
} catch (error) {
throw new Error(`Error when saving the config. Message : ${error.message}`);
}
}
async downloadFile() {
try {
await this.bucket.file(filename).download({
destination: this.filePath
});
} catch (error) {
throw new Error(`Error when saving the config. Message : ${error.message}`);
}
}
}