我使用的是rails 4.1.4和fakefs 0.5.2。我试图升级到rails 4.2.0,现在我的测试失败了,出现了这个错误:
Errno::ENOENT:
No such file or directory @ rb_sysopen - https://google.com/
我试着搜索,最终发现这可能是由FakeFS引起的,因为当我在rails控制台中调用open时,它的工作原理如下:
2.1.0 :001 > link = open("https://google.com")
=> #<Tempfile:/tmp/open-uri20150227-21959-18cqr0h>
2.1.0 :003 > require 'fakefs/spec_helpers'
=> true
2.1.0 :004 > FakeFS.activate!
=> true
2.1.0 :005 > link = open("https://google.com")
Errno::ENOENT: No such file or directory - https://google.com
有人知道这是什么原因吗?
更新:所以,我最终决定用路缘石取代开放式uri。还有其他替代方案,如rest客户端和Net::HTTP。感谢
NET::SSH.sftp.download
中有一个错误。使用net/scp
require 'net/ssh'
require 'net/sftp'
require 'net/scp'
begin
puts '------------------------'
puts 'Connecting to server...'
Net::SSH.start(host, username, :password => password, :port => port) do |ssh|
puts '------------------------'
puts 'Entered the server...'
puts '------------------------'
puts 'Listing directory..'
puts ssh.sftp.dir.entries(directory.to_s).map { |e| e.name }
puts local_filename_path = Dir.pwd+'/'+filename.to_s
puts remote_filename_path = "directory.to_s+filename.to_s"
puts '------------------------'
puts "Download file #{remote_filename_path}..."
ssh.scp.download!(remote_filename_path, local_filename_path ) do |ch, name, sent, total|
puts "#{name}: #{sent}/#{total}"
end
puts '------------------------'
puts "File download #{remote_filename_path}!!"
puts '------------------------'
puts "done! exit!"
ssh.wait!
# ssh.execute! 'exit'
ssh.close
end
rescue Timeout::Error
@error = " Timed out"
rescue Errno::EHOSTUNREACH
@error = " Host unreachable"
rescue Errno::ECONNREFUSED
@error = " Connection refused"
rescue Net::SSH::AuthenticationFailed
@error = " Authentication failure"
end
if defined?(@error) then
puts @error
end