为什么我会出现sftp超时错误?

时间:2012-01-13 09:38:11

标签: ruby sftp net-sftp

我正在使用net-sftp gem来访问sftp帐户中的文件。我正在做一些批量操作,比如从一个sftp帐户复制超过100个文件到另一个但我收到错误:

Net::SFTP::StatusException (4, "failure")

我认为这是因为会话超时或缓冲区大小限制而发生的?如果是这种情况,我该如何增加限制,以便我可以对100多个文件执行批量操作。

这是堆栈跟踪:

    Net::SFTP::StatusException (4, "failure")
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:845:in `wait_for'",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net  /sftp/session.rb:589:in `rename!'",
"/home/xxxxx_user/prod/lib/tasks  /xxxxx_rfa_intake.rake:72:in `move'",
"/home/xxxxx_user/prod/lib/tasks  /xxxxx_rfa_intake.rake:61:in `process'",
"/home/xxxxx_user/prod/lib/tasks  /xxxxx_rfa_intake.rake:26",
"/home/xxxxx_user/prod/lib/tasks  /xxxxx_rfa_intake.rake:20:in `each'",
"/home/xxxxx_user/prod/lib/tasks/xxxxx_rfa_intake.rake:20",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:938:in `call'",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:938:in `do_version'",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:938:in `each'",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:938:in `do_version'",
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:908:in `when_channel_polled'",
"/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `to_proc'",
"/usr/local/lib/ruby/gems/1.8/gems/net-ssh-2.0.21/lib/net/ssh/connection/channel.rb:311:in `call'",

1 个答案:

答案 0 :(得分:2)

这两行表示代码正在等待重命名:

"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:845:in `wait_for'", 
"/usr/local/lib/ruby/gems/1.8/gems/net-sftp-2.0.2/lib/net/sftp/session.rb:589:in `rename!'", 

在您的代码中出现:

"/home/xxxxx_user/prod/lib/tasks/xxxxx_rfa_intake.rake:72:in `move'", 

出于某种原因,此举失败了。根据我的经验,这可能是因为权限不正确,或者驱动器已满,但可能还有很多其他原因。

因为你没有提供任何我能提供的帮助的源代码。