Forum: Ruby lost response while transfering large file to FTP server

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
94cdcdb61f509966ac0e52f8f23ae950?d=identicon&s=25 Clive Lin (clive)
on 2009-01-04 09:48
When I used Net::FTP to put large files(about 200MB) to FTP server, the
program always lost response. The file was actually transferred
correctly later on, but the ftp.put method failed to return, preventing
the code after that method from executing. And the ruby process was not
terminated.

The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server

Anyone know the problem?
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2009-01-04 15:35
(Received via mailing list)
On 04.01.2009 09:47, Clive Lin wrote:
> When I used Net::FTP to put large files(about 200MB) to FTP server, the
> program always lost response. The file was actually transferred
> correctly later on, but the ftp.put method failed to return, preventing
> the code after that method from executing. And the ruby process was not
> terminated.
>
> The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server
>
> Anyone know the problem?

Maybe you executed it in a thread and that died silently.  You can make
the error explicit if you like:

Robert@babelfish2 ~
$ irb
irb(main):001:0> t = Thread.new { raise "silent death" }
=> #<Thread:0x100106d4 dead>
irb(main):002:0> t.join
RuntimeError: silent death
         from (irb):1
         from (irb):2:in `join'
         from (irb):2
         from :0
irb(main):003:0> Thread.abort_on_exception = true
=> true
irb(main):004:0> t = Thread.new { raise "interpreter kill" }
(irb):4:in `irb_binding': interpreter kill (RuntimeError)
         from (irb):4:in `initialize'
         from (irb):4:in `new'
         from (irb):4:in `irb_binding'
         from /usr/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
         from :0

Robert@babelfish2 ~
$ echo $?
1

Robert@babelfish2 ~
$

Kind regards

  robert
94cdcdb61f509966ac0e52f8f23ae950?d=identicon&s=25 Clive Lin (clive)
on 2009-01-04 16:14
Attachment: backup.rb (2 KB)
Thanks for reply.
I didn't create a new thread to do the ftp job; it's in main thread. I
think any exception will be throw to the console, but nothing happened.
And the file was actually transferred without any error I am aware of.
ftp.put just couldn't return.

I attach the source file.

Robert Klemme wrote:
> On 04.01.2009 09:47, Clive Lin wrote:
>> When I used Net::FTP to put large files(about 200MB) to FTP server, the
>> program always lost response. The file was actually transferred
>> correctly later on, but the ftp.put method failed to return, preventing
>> the code after that method from executing. And the ruby process was not
>> terminated.
>>
>> The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server
>>
>> Anyone know the problem?
>
> Maybe you executed it in a thread and that died silently.  You can make
> the error explicit if you like:
>
> Robert@babelfish2 ~
> $ irb
> irb(main):001:0> t = Thread.new { raise "silent death" }
> => #<Thread:0x100106d4 dead>
> irb(main):002:0> t.join
> RuntimeError: silent death
>          from (irb):1
>          from (irb):2:in `join'
>          from (irb):2
>          from :0
> irb(main):003:0> Thread.abort_on_exception = true
> => true
> irb(main):004:0> t = Thread.new { raise "interpreter kill" }
> (irb):4:in `irb_binding': interpreter kill (RuntimeError)
>          from (irb):4:in `initialize'
>          from (irb):4:in `new'
>          from (irb):4:in `irb_binding'
>          from /usr/lib/ruby/1.8/irb/workspace.rb:52:in `irb_binding'
>          from :0
>
> Robert@babelfish2 ~
> $ echo $?
> 1
>
> Robert@babelfish2 ~
> $
>
> Kind regards
>
>   robert
94cdcdb61f509966ac0e52f8f23ae950?d=identicon&s=25 Clive Lin (clive)
on 2009-01-05 02:41
Clive Lin wrote:
> When I used Net::FTP to put large files(about 200MB) to FTP server, the
> program always lost response. The file was actually transferred
> correctly later on, but the ftp.put method failed to return, preventing
> the code after that method from executing. And the ruby process was not
> terminated.
>
> The ruby version is 1.8.6 on Ubuntu 8.10 64 bit server
>
> Anyone know the problem?

I replaced the ftp.put with the following code:
  ftp_info=%x{
    pftp -n #{FTP_HOST} <<SCRIPT
      user #{FTP_USER} #{FTP_PWD}
      put #{BACKUP_FILE}
      quit
    SCRIPT
  }
  $logger.info(ftp_info)
It still failed to return, without any logger information.
94cdcdb61f509966ac0e52f8f23ae950?d=identicon&s=25 Clive Lin (clive)
on 2009-01-05 02:43
Clive Lin wrote:

>
> I replaced the ftp.put with the following code:
>   ftp_info=%x{
>     pftp -n #{FTP_HOST} <<SCRIPT
>       user #{FTP_USER} #{FTP_PWD}
>       put #{BACKUP_FILE}
>       quit
>     SCRIPT
>   }
>   $logger.info(ftp_info)
> It still failed to return, without any logger information.

And at this time, the backup file still got transferred successfully
This topic is locked and can not be replied to.