[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

net-ssh hanging?

Carl Youngblood

10/9/2004 6:58:00 AM

Okay, I set up ruby again and net-ssh appears to be working properly.
At least, rpa didn't give me any errors during install and I have been
able to get some of it to work. However, when I run the following
little test app, it successfully copies the two files to the server,
but it hangs indefinitely after it's finished. I thought that when I
started a session in block mode it was supposed to exit automatically
after everything was finished. Is there something I'm missing?

Thanks,
Carl

--------------------------


#!/usr/bin/env ruby

require 'net/ssh'
require 'net/ssh/sftp'

Net::SSH.start('host', 'user', 'pass') do |session|
Net::SSH::SFTP.session(session) do |sftp|
sftp.put('file1', 'contents') do |status|
if status[:code] != Net::SSH::SFTP::Session::SSH_FX_OK
raise "error (#{status[:code]}, #{status[:message]})"
else
puts "success"
end
end
sftp.put('file2', 'contents') do |status|
if status[:code] != Net::SSH::SFTP::Session::SSH_FX_OK
raise "error (#{status[:code]}, #{status[:message]})"
else
puts "success"
end
end
end
session.main_loop
end


2 Answers

Jamis Buck

10/10/2004 2:25:00 PM

0

Carl Youngblood wrote:
> Okay, I set up ruby again and net-ssh appears to be working properly.
> At least, rpa didn't give me any errors during install and I have been
> able to get some of it to work. However, when I run the following
> little test app, it successfully copies the two files to the server,
> but it hangs indefinitely after it's finished. I thought that when I
> started a session in block mode it was supposed to exit automatically
> after everything was finished. Is there something I'm missing?
>
> Thanks,
> Carl

Carl, my apologies for not responding to this sooner.

You need to call 'sftp.shutdown' to close the channels that the SFTP
session opens. Otherwise, session.mainloop will loop forever, waiting
for those channels to close.

However, you can't just do:

sftp.put(...) { ... }
sftp.put(...) { ... }
sftp.shutdown

If you do, your program will terminate without transferring anything
(due to the asynchronous nature of SFTP). Instead, you have to have each
subsequent reuqest occur after the previous request finished:

sftp.put(...) do
sftp.put(...) do
sftp.shutdown
end
end
sftp.main_loop

Does that make sense? If that is still not very clear, let me know and
I'll hack on your source code and send you one that works as described
above.

Hope that helps, and good luck, Carl!

- Jamis

>
> --------------------------
>
>
> #!/usr/bin/env ruby
>
> require 'net/ssh'
> require 'net/ssh/sftp'
>
> Net::SSH.start('host', 'user', 'pass') do |session|
> Net::SSH::SFTP.session(session) do |sftp|
> sftp.put('file1', 'contents') do |status|
> if status[:code] != Net::SSH::SFTP::Session::SSH_FX_OK
> raise "error (#{status[:code]}, #{status[:message]})"
> else
> puts "success"
> end
> end
> sftp.put('file2', 'contents') do |status|
> if status[:code] != Net::SSH::SFTP::Session::SSH_FX_OK
> raise "error (#{status[:code]}, #{status[:message]})"
> else
> puts "success"
> end
> end
> end
> session.main_loop
> end
>
> .
>


--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck...


Carl Youngblood

10/10/2004 3:17:00 PM

0

Makes perfect sense. Thanks Jamis!

On Sun, 10 Oct 2004 23:24:43 +0900, Jamis Buck <jgb3@email.byu.edu> wrote:
> Does that make sense? If that is still not very clear, let me know and
> I'll hack on your source code and send you one that works as described
> above.