How to maintain a single network connection? (newbie)

Discussion in 'Ruby' started by Fenster Blick, Dec 14, 2007.

  1. 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/.
     
    Fenster Blick, Dec 14, 2007
    #1
    1. Advertising

  2. 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
     
    John Pywtorak, Dec 14, 2007
    #2
    1. Advertising

  3. 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/.
     
    Fenster Blick, Dec 15, 2007
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Kal
    Replies:
    1
    Views:
    9,534
    Kevin Spencer
    Jun 21, 2004
  2. =?Utf-8?B?UHJvbm9qaXQgUm95?=

    Maintain Single Login in different Live Servers

    =?Utf-8?B?UHJvbm9qaXQgUm95?=, Dec 29, 2004, in forum: ASP .Net
    Replies:
    1
    Views:
    382
    bruce barker
    Dec 29, 2004
  3. Jane Davis

    Network Service account over network

    Jane Davis, Jun 22, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    454
    Kevin Spencer
    Jun 22, 2005
  4. Replies:
    0
    Views:
    575
  5. Ken

    Maintain DB connection

    Ken, Oct 6, 2009, in forum: Java
    Replies:
    5
    Views:
    633
    John B. Matthews
    Oct 7, 2009
Loading...

Share This Page