所以我有一些代码可以检查远程 SFTP 服务器上是否有某个文件:
def size
adapter.sftp.stat(path).size
end
sftp
在这种情况下定义的 Net::SFTP::Session 对象在哪里
@sftp = Net::SFTP.start(host, username, password: password)
并且path
是我要调用的对象的文件路径stat()
。
不幸的是,当我尝试执行此代码时,出现此错误:
NoMethodError:
undefined method `send_data' for nil:NilClass
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/session.rb:814:in `send_packet'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/protocol/base.rb:45:in `send_request'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/protocol/01/base.rb:90:in `open'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/session.rb:830:in `request'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/session.rb:182:in `open'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/session.rb:191:in `open!'
# /usr/local/lib/ruby/gems/2.2.0/gems/net-sftp-2.1.2/lib/net/sftp/operations/file_factory.rb:40:in `open'
# /Users/Ben/remote_filesystem/lib/remote_filesystem/path/sftp.rb:46:in `size'
# ./sftp_spec.rb:72:in `block (3 levels) in <top (required)>'
据我所知,通过查看 Net::SFTP::Session 的源代码session.rb
,channel.send_data
调用了第 814 行的 Net::SFTP::Session,但显然我的 SFTP 会话出于某种原因有一个 Nil 通道。谁能解释如何解决这个问题?