![]() |
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/. |
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 |
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.