Ruby备份宝石上传到S3时失败。在37分钟后连接重置。

8

备份文件大小为250MB。我认为这并不算大,但问题似乎随着文件大小的增加而增加。

下面是备份 gem 的日志记录。

请注意时间跨度;在上传约37分钟后,连接被重置。

[2015/10/30 09:20:40][message] Storage::S3 started transferring '2015.10.30.09.20.01.myapp_postgres.tar' to bucket 'myapp-backups'.
[2015/10/30 09:57:06][error]   ModelError: Backup for Back up PostgreSQL (myapp_postgres) Failed!
[2015/10/30 09:57:06][error]   An Error occured which has caused this Backup to abort before completion.
[2015/10/30 09:57:06][error]   Reason: Excon::Errors::SocketError
[2015/10/30 09:57:06][error]   Connection reset by peer

每次都是在37分钟后发生的吗? - rohit89
不,它是多变的。它甚至不总是发生,但间歇性地更频繁出现。 - oma
2个回答

4

您是否尝试了错误处理选项,它可以重新传输失败的文件部分:

store_with S3 do |s3|
  s3.max_retries = 10
  s3.retry_waitsec = 30
end

同时保持块大小小:

store_with S3 do |s3|
  s3.chunk_size = 5 # MiB
end

您可能还想使用分割器选项


我现在已经有了带有重试选项的测试。我还设置了4000的块大小,认为它是一个计数而不是一个大小指标。 - oma
NoMethodError: undefined method `max_retries=' for #Backup::Storage::S3:0x007f9c7c6f58e0 - oma
你使用的备份 gem 版本是哪个? - Renaud Kern
我需要更多地工作,更新等等,但现在太忙了(真是陈词滥调)。Renaud,我会给你奖励,但在证明之前不会接受任何答案,以免误导任何人。谢谢你的帮助 :) - oma
Renaud,我不得不和厨师搏斗,丢刀子和菜谱到处乱扔。说实话,我并不是一个大厨 :D 最终我成功升级了备份宝石。初步结果非常积极,我将继续监控并在这里更新以供其他读者参考。 - oma
感谢Oma的反馈。 - Renaud Kern

1
我建议暂时使用ruby-xz进行压缩,以便发送更小的文件并进行临时修补,然后尝试使用以下代码 Excon.defaults[:write_timeout] = 500 或更高以达到目的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接