未能在Ruby代码中捕获Errno :: ECONNRESET

时间:2012-11-07 21:00:09

标签: ruby heroku amazon-s3 fog

在部署到Heroku的我的Rails 3.1项目中,我有一个rake任务,根据数据库中的记录生成几十万个小PNG,并使用fog将结果上传到S3,一次一个文件。 (在我使用heroku之前,任务在本地保存了文件,一切正常。)当我使用heroku run:detached运行任务时,它会运行一段时间,并上传一堆文件,但最终会失败{{ 1}}。这有什么奇怪之处在于我修改了脚本以捕获并重试该异常,如下所示:

Connection reset by peer (Errno::ECONNRESET)

根据堆栈跟踪,file_exists = false retry_count = 10 begin file_exists = directory.files.head(filekey) rescue Errno::ECONNRESET => e if retry_count > 0 then logger.warning("Connection reset: #{e.inspect}") retry_count -= 1 sleep(1) retry else raise end end 是导致异常的代码行,所以我觉得我缺少一些关于Ruby异常处理的东西。我很想知道我做错了什么,因为我不能100%确定这是我的开始/救援区块的问题,雾处理网络错误的方式,或者是什么。

这是完整的堆栈跟踪:

file_exists = directory.files.head(filekey)

1 个答案:

答案 0 :(得分:1)

或许尝试这样:

begin
  ...
rescue Errno::ECONNRESET => e
  ...
rescue => e
  ...
end
相关问题