尝试将二进制文件从URL添加到FTP服务器时,Net :: FTP和open-uri挂起

时间:2014-04-24 03:48:41

标签: ruby ftp open-uri net-ftp

我有一个场景,我有一个带有二进制内容的S3 URL需要传输到FTP服务器。我正在使用Net::FTPopen-uri和Ruby 2.0.0-p353。

require 'net/ftp'
require 'open-uri'

Net::FTP.open(x,y,z) do |ftp|
            ftp.putbinaryfile(open(an_s3_url), 'remote_filename', 4096)

上面的代码是在当前目录中创建临时open-uriXXYY-*临时文件,但随后挂起。我不知道为什么。中断该功能会产生以下跟踪:

home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:434:in `accept': Interrupt
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:434:in `transfercmd'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:543:in `block (2 levels) in storbinary'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:199:in `with_binary'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:542:in `block in storbinary'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:541:in `storbinary'
    from /home/ubuntu/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/net/ftp.rb:690:in `putbinaryfile'

解决方法是检索文件然后放入,但这感觉很笨拙。我不能这样做,或者我错过了一些明显的东西?包括或不包含块大小的相同问题。

1 个答案:

答案 0 :(得分:1)

答案是使用被动FTP - 这是我遗漏的显而易见的事情(?!)。

默认设置为false。

Net::FTP.open(x,y,z) {|ftp| ftp.passive = true ... }

像魅力一样工作。