在我重新部署之前,Google Cloud会出现ECONNRESET错误

Edw*_*ang 6 google-cloud-storage firebase google-cloud-functions

我正在使用Google Cloud Functions:

  1. 观看新的Firebase条目
  2. 下载Firebase条目中引用的文件
  3. 根据该文件生成缩略图.
  4. 将缩略图上传到云端桶.

不幸的是,我ECONNRESET在第4步中反复出现错误,修复它的唯一方法似乎是重新部署该功能.任何想法如何进一步调试这个?

编辑:

似乎很多次发生这种情况时,当我尝试再次部署该功能时,它会出错,我必须运行两次部署.是挂东西还是什么东西?

在此输入图像描述

Pau*_*aul 4

2017 年 5 月 9 日更新

根据此线程,谷歌云 Nodejs API 开发人员对初始化时使用的默认值进行了一些更改,这应该可以解决这些 ECONNRESET 套接字问题。

来自 github GoogleCloudPlatform/google-cloud-node 上的 @stephen++ 问题 2254:

我们在 Cloud Function 环境中默认禁用了 Forever 代理。如果您卸载并重新安装@google-cloud/storage,您将自动采用新行为。感谢大家所有有用的调试!


较旧的帖子如下:

ECONNRESET在云函数平台上使用存储时遇到类似问题的解决方案是使用npm:promise-retry,但要设置自己的重试策略,因为默认的 10 次重试太多了。

向 Google 支持报告了云功能的 ECONNRESET 问题(如果您在这种情况下也遇到了 ECONNRESET,但在其他情况下没有出现这种情况,您可能会加注星号),他们回复说“不会修复”,表示该行为是预期的。Google 支持人员表示,API 客户端库用于连接的套接字会在几分钟后超时,然后当您的云功能尝试再次使用它时,您会收到 ECONNRESET。他们建议在初始化存储 API 时添加autoRetry:true,但这没有帮助。

ECONNRESET 也发生在读取端。在读取和写入情况下都有promise-retry帮助,并且大多数时候只需重试 1 次即可重置坏套接字。

所以我写信npm:pipe-to-storage返回一个重试、检查 md5 等的承诺,但我还没有用二进制数据测试它,只有文本,所以我不知道你是否可以将它与图像文件一起使用。调用看起来像这样:

const fs = require('fs');
const storage = require('@google-cloud/storage')();
const pipeToStorage = require('pipe-to-storage')(storage);
const source = ()=>(fs.createReadStream("/path/to/your/file/to/upload"));
pipeToStorage(source, bucketName, fileNameInBucket).then(//do next step);
Run Code Online (Sandbox Code Playgroud)

另请参阅如何从云函数中读取 .json 类型的新云存储文件的内容?