【问题标题】:Net::FTP and open-uri hanging while trying to put binary file to from URL to FTP server尝试将二进制文件从 URL 放入 FTP 服务器时,Net::FTP 和 open-uri 挂起
【发布时间】:2014-04-24 03:48:41
【问题描述】:

我有一个 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'

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

【问题讨论】:

    标签: ruby ftp open-uri net-ftp


    【解决方案1】:

    答案是使用被动 FTP——这是我所缺少的明显(?!)的东西。

    默认设置为 false。

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

    工作就像一个魅力。

    【讨论】:

    • 我用过ftp.passive = true,效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    • 2013-10-03
    相关资源
    最近更新 更多