假 FS 导致打开 uri 打开导致"No such file or directory @ rb_sysopen"



我使用的是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

相关内容

最新更新