在部署到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)
答案 0 :(得分:1)
或许尝试这样:
begin
...
rescue Errno::ECONNRESET => e
...
rescue => e
...
end