【问题标题】:Google Cloud Functions with ECONNRESET errors until I redeploy在我重新部署之前出现 ECONNRESET 错误的 Google Cloud Functions
【发布时间】:2017-08-20 20:40:05
【问题描述】:

我使用 Google Cloud Functions 来:

  1. 注意新的 Firebase 条目
  2. 下载 Firebase 条目中引用的文件
  3. 根据该文件生成缩略图。
  4. 将缩略图上传到云存储桶。

不幸的是,我在第 4 步反复收到 ECONNRESET 错误,修复它的唯一方法似乎是重新部署该函数。有什么想法可以进一步调试吗?

编辑:

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

【问题讨论】:

标签: firebase google-cloud-storage google-cloud-functions


【解决方案1】:

2017 年 5 月 9 日更新

根据this thread,google cloud nodejs API 开发人员对初始化时使用的默认值进行了一些更改,这应该可以解决这些 ECONNRESET 套接字问题。

来自@stephen++ on github GoogleCloudPlatform/google-cloud-node issue 2254:

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


较早的帖子关注:

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

我报告了一个ECONNRESET issue with cloud functions to Google Support(如果您在这种情况下也获得 ECONNRESET 而不是在其他情况下,您可能会加注星标),他们回答说“不会修复”该行为是预期的。谷歌支持表示 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);

另见How do I read the contents of a new cloud storage file of type .json from within a cloud function?

【讨论】:

    【解决方案2】:

    您可以直接向Firebase Support team 报告错误,或使用 Firebase 打开support ticket 以解决特定问题。

    您还可以在 Google Issue Tracker 中报告 Cloud Functions 特定问题,这与 Stack Overflow 类似,因为它可供公众访问(但专门用于提交问题报告)。

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 1970-01-01
      • 2020-05-10
      • 2018-06-17
      • 2019-04-11
      • 2018-07-11
      • 2020-11-03
      • 2021-09-27
      • 2019-10-06
      相关资源
      最近更新 更多