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

时间:2017-03-27 23:47:02

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

我正在使用Google Cloud Functions:

  1. 关注新的Firebase条目
  2. 下载Firebase条目中引用的文件
  3. 根据该文件生成缩略图。
  4. 将缩略图上传到云端桶。
  5. 不幸的是,我在第4步中反复出现ECONNRESET错误,修复它的唯一方法似乎是重新部署该函数。任何想法如何进一步调试这个?

    编辑:

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

    enter image description here

2 个答案:

答案 0 :(得分:4)

2017年5月9日更新

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

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

  

默认情况下,我们已在Cloud Function中禁用了forever代理   环境。如果你取消并重新安装@ google-cloud / storage,你就可以了   将自动获取新行为。谢谢你的所有   大家帮忙调试!

旧帖子关注:

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

我报告了一个ECONNRESET issue with cloud functions to Google Support(如果您在此上下文中也获得了ECONNRESET但在其他上下文中没有获得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?

答案 1 :(得分:0)

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

您还可以在Google Issue Tracker中报告特定于云计算功能的问题,该问题类似于Stack Overflow,因为它可以被公众访问(但专门用于提交问题报告)。