rubyrubygemssftpnet-sftp

Simple Ruby SFTP example syntax error


I have an issue that seems like very flaky behavour, is this a problem with Ruby or something I've done? Please help - my project is stalled until I resolve this.

Given this code running on Mac OS Leopard:

require 'uri'
require 'net/ssh'
require 'net/sftp'
include Net

def copy_from_uri( uri, local_path )
    # SFTP copy
    SFTP.start( uri.host, uri.user, :password => 'password' ) do |sftp|
        puts "downloading from #{uri.host}, path #{uri.path}\n"
        sftp.download( uri.path, local_path )
    end
end

remote_uri = URI.parse( "sftp://example.com/test.mp4" )
local_file = "/tmp/remote_copy_test.mp4"
result = copy_from_uri( remote_uri, local_file );

What would cause the following error?

$ ruby sftp_fail.rb 
/Library/Ruby/Site/1.8/net/sftp.rb:43:in `start': undefined method `shutdown!' 
for nil:NilClass (NoMethodError)
    from sftp_fail.rb:8:in `copy_from_uri'
    from sftp_fail.rb:18

FYI I've set RUBYOPT correctly so gems are loaded and my gems are up-to-date, according to:

$gem list --local
net-sftp (2.0.2, 1.1.0)
net-ssh (2.0.15, 1.1.2)

Solution

  • It is telling you that some object which you are attempting to call the shutdown! method on is nil. Now, that code is not in your example, so it is hard to say why that would be, but I highly doubt it is a bug in the language.

    It is happening in this method call, so perhaps you can post that code?

    result = copy_from_uri( remote_uri, local_file );
    

    URI#parse should never return nil (it would throw an exception), so it would help to see that method body if possible.