Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Ruby (http://www.velocityreviews.com/forums/f66-ruby.html)
-   -   How to maintain a single network connection? (newbie) (http://www.velocityreviews.com/forums/t846616-how-to-maintain-a-single-network-connection-newbie.html)

Fenster Blick 12-14-2007 10:52 PM

How to maintain a single network connection? (newbie)
 
Hi, I am a beginner to Ruby, having come over from the Java side of
things. I am writing a simple script to familiarize myself with the
Net-SSH and Net-SFTP libraries. I want to split my script into several
different functions to improve readability and organization.

However, I'm having difficulty doing this. When I create an SSH
connection, the connection automatically dies after I exit the function.
How can I keep this connection alive? I tried storing the connection as
a global variable but it did not work - the connection still closed.

Here is a portion of my script. When I run it, I call "testAll". It
fails on the first line of sftpTest1A:
----------------------------------------

$session = nil

def sftpTest1
puts "Testing sftp..."
$session= Net::SSH.start( '127.0.0.1', :username=>'user',
:password=>'password' )
sftp = $session.sftp.connect
handle = sftp.opendir( "." )
items = sftp.readdir(handle)
puts items
sftp.close_handle( handle )
sftp.close
#At this point, session should still be open, correct?
end


def sftpTest1A
shell = $session.shell.open #FAILS at this line!

shell.pwd

print shell.stdout while shell.stdout?
$stderr.puts "-- stderr: --"
$stderr.print shell.stderr while shell.stderr?

$session.close

end

def testAll
sftpTest1
sftpTest1A
end
--
Posted via http://www.ruby-forum.com/.


John Pywtorak 12-14-2007 11:09 PM

Re: How to maintain a single network connection? (newbie)
 
Hi Fenster,

I suspect it is the sftp.close stanza that is causing the problem. Try
removing that, what happens?

Also, I would recommend using the block form of Net::SSH.start if you
can. That is

Net::SSH.start(...) do |session|
#do all your work here, pass the session to your methods
end

Johnny P

Fenster Blick wrote:
> Hi, I am a beginner to Ruby, having come over from the Java side of
> things. I am writing a simple script to familiarize myself with the
> Net-SSH and Net-SFTP libraries. I want to split my script into several
> different functions to improve readability and organization.
>
> However, I'm having difficulty doing this. When I create an SSH
> connection, the connection automatically dies after I exit the function.
> How can I keep this connection alive? I tried storing the connection as
> a global variable but it did not work - the connection still closed.
>
> Here is a portion of my script. When I run it, I call "testAll". It
> fails on the first line of sftpTest1A:
> ----------------------------------------
>
> $session = nil
>
> def sftpTest1
> puts "Testing sftp..."
> $session= Net::SSH.start( '127.0.0.1', :username=>'user',
> :password=>'password' )
> sftp = $session.sftp.connect
> handle = sftp.opendir( "." )
> items = sftp.readdir(handle)
> puts items
> sftp.close_handle( handle )
> sftp.close
> #At this point, session should still be open, correct?
> end
>
>
> def sftpTest1A
> shell = $session.shell.open #FAILS at this line!
>
> shell.pwd
>
> print shell.stdout while shell.stdout?
> $stderr.puts "-- stderr: --"
> $stderr.print shell.stderr while shell.stderr?
>
> $session.close
>
> end
>
> def testAll
> sftpTest1
> sftpTest1A
> end



Fenster Blick 12-15-2007 03:31 AM

Re: How to maintain a single network connection? (newbie)
 
Thanks for the reply. Unfortunately, that didn't work.

However, I did end up solving the issue - after taking a break and
thinking about it away from the computer. The proper way to approach the
issue was to utilize a class.

I should have created an instance variable for the connection in a
separate Server class. In this way, I can keep a connection alive as
long as a Server object is alive.

I ran into difficulties when I approached the problem like a Visual
Basic script... all's better now!

John Pywtorak wrote:
> Hi Fenster,
>
> I suspect it is the sftp.close stanza that is causing the problem. Try
> removing that, what happens?
>
> Also, I would recommend using the block form of Net::SSH.start if you
> can. That is
>
> Net::SSH.start(...) do |session|
> #do all your work here, pass the session to your methods
> end
>
> Johnny P


--
Posted via http://www.ruby-forum.com/.



All times are GMT. The time now is 01:45 PM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57