ruby-on-rails - 如何在 Ruby 中并行递归下载 FTP 文件夹?

标签 ruby-on-rails ruby

我需要在 ruby​​ 中本地缓存一个 ftp 文件夹。现在我正在使用 ftp_sync下载ftp文件夹但是速度很慢,你们知道有什么库可以并行下载文件夹文件吗? 谢谢!

最佳答案

syncftp gem 可以帮助您:

http://rubydoc.info/gems/syncftp/0.0.3/frames

Ruby 有一个不错的内置 FTP 库,以防你想自己动手:

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/net/ftp/rdoc/Net/FTP.html

要并行下载文件,可以使用带超时的多线程:

Ruby Net::FTP Timeout Threads

并行框架 Celluloid 是完成并行工作的好方法:

https://github.com/celluloid/celluloid

总而言之,如果下载速度受限于您的整体网络带宽,那么这些方法都无济于事。

在这种情况下,要加快传输速度,请确保您只下载更改的信息:新文件和现有文件的更改部分。

分段下载在某些情况下可以提供巨大的加速,例如下载的大日志文件,其中只有一小部分文件发生了变化,并且变化都在文件末尾,并且都是附加的。

您还可以考虑对命令行进行 shell 处理。有许多工具可以帮助您解决这个问题。一个很好的通用工具是“curl”,它也支持 FTP 文件的简单范围,例如,您可以像这样使用 FTP 获取文档的前 100 个字节:

curl -r 0-99 ftp://www.get.this/README

您是否对 FTP 以外的其他协议(protocol)开放?看看“rsync”命令,它非常适合下载同步。 rsync 命令有许多优化以仅传输更改的数据。例如 rsync 可以像这样将远程目录同步到本地目录:

rsync -auvC me@my.com:/remote/foo/ /local/foo/ 

关于ruby-on-rails - 如何在 Ruby 中并行递归下载 FTP 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318549/

相关文章:

ruby-on-rails - Ruby on Rails 中多态模型的作用域

ruby - 即使 gem 安装有效,Bundler 也找不到 gem

html - 推荐好的 html 和 css 编辑器? (Web应用程序)

ruby-on-rails - rails : Why does my route enforce an ending with a dot id?

javascript - 如果禁用了 Javascript,则停止加载页面

ruby-on-rails - 用 USR2 重启 Unicorn - 退出 old master

ruby-on-rails - 警告 : Nokogiri was built against LibXML version 2. 8.0,但已动态加载 2.7.8

ruby-on-rails - Rails application.html.erb 的 Sinatra 等价物是什么?

ruby-on-rails - 在 mongoid 中不区分大小写搜索单词

ruby-on-rails - 谷歌管理目录插入用户