【问题标题】:Can't Find file after having written to it in Google Cloud Functions在 Google Cloud Functions 中写入文件后找不到文件
【发布时间】:2018-07-23 20:06:47
【问题描述】:

当我写入 os.tmpdir 时,我可以在查看目录时看到该文件,但在随后调用同一函数时,我什么也看不到。我认为这意味着文件不知何故不再存在(不太可能),或者我正在寻找不同的地方。我知道我应该在使用它们之后删除 tmp 目录中的文件,但在此之前我希望能够再次找到这些文件,以确保任何删除方法在以后都可以正常工作。

下面是我编写文件的代码。

var wstream = fs.createWriteStream(os.tmpdir() + '/myOutput.txt');


wstream.write('Hello world!\n');
wstream.write('Another line\n');

wstream.end();      

wstream.on('finish', function () {
        console.log('file has been written');
        fs.readdir(os.tmpdir(), (err, files) => {
            console.log(files.length);
            files.forEach(file => {
                        console.log("Hey Again3", file);
                });
            })

【问题讨论】:

    标签: node.js google-cloud-functions


    【解决方案1】:

    Cloud Functions 会根据需要启动环境以满足应用程序的负载,并在不再需要它们时将其关闭。本地存储特定于每个容器,而不是在容器之间共享。

    这意味着无法保证您写入本地存储的任何文件在后续调用 Cloud Functions 时可用。因此,您应该只使用本地存储:

    • 对于单个调用中的临时文件,在这种情况下,您应该在函数退出时清理它们。
    • 用于缓存可以重新创建但价格昂贵的文件。例如。从数据库加载的东西。

    【讨论】:

    • 有没有办法让我删除我在过去执行中创建的文件,这样我就不会被收费?每个只有几个字节,所以没什么好担心的。
    • 当然。您只需要在函数退出之前删除这些文件。由于您正在对文件名进行硬编码,这应该很容易。
    • 是的,但不会只删除当前执行期间创建的文件,而不是过去的文件,因为过去的 /tmp 文件不可访问?
    • 无法保证每次执行都在新环境中运行,因此您应该假设。您应该跟踪您创建的文件,然后在完成后删除这些文件。
    • 听起来不错,所以过去执行的文件丢失了?再次确认不是问题。
    猜你喜欢
    • 2019-10-15
    • 2018-04-22
    • 2017-12-23
    • 1970-01-01
    • 2022-06-30
    • 2023-03-16
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多