1

我有一个视频转码服务器,当视频被转码时,我需要将转换后的视频版本发送到 CDN,并向我的 CMS 管理员展示进程的进度

起初(我想就像大多数其他 RoR 开发人员一样:)我为此目的寻找了一个 gem。老实说,我找不到一个。这让我想到我错过了一些东西。

当我四处搜索时,只需得到“回形针”和“ carrierview ”作为答案。但我不希望 gem 让用户将文件上传到服务器。我想将文件从我的服务器复制到另一台服务器

经过一番研究,我发现了一个名为Net::SCP的原生 Ruby 类,它有一个进度报告参数。我将 Resque 用于后台进程。所以我可能会用这个。

但是,当我使用这个块时:

scp.upload!("/path/to/local", "/path/to/remote") do |ch, name, sent, total|   
puts "#{name}: #{sent}/#{total}" 
end

它非常频繁地回调“发送”参数。我认为,每秒向我的数据库发送大约 5 个更新查询不是一个好主意?这种情况有解决办法吗?

那你建议我怎么做?我要求的目的是否有宝石?或者我应该使用什么?

谢谢你。

4

1 回答 1

2

Net::SCP#upload!正如文档所暗示的那样,您可以增加块大小选项:

每当一个新的数据块 [...] 发送到一个文件时,[块给定的upload] 将被调用 [...]

并进一步#upload

:chunk_size- 应该发送的每个“块”的大小。默认为 2048。更改此值可能会提高吞吐量,但会降低交互性。

……这就是你想要的。

chunk_size = 100.kilobytes
scp.upload!(local_fname, remote_fname, chunk_size: chunk_size) do |ch, name, sent, total|   
  puts "#{name}: #{sent}/#{total}"
end
于 2013-05-01T09:54:52.917 回答