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
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:inirb_binding’: interpreter kill (RuntimeError)
from (irb):4:in initialize' from (irb):4:innew’
from (irb):4:in irb_binding' from /usr/lib/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from :0
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 K. 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:inirb_binding’: interpreter kill (RuntimeError)
from (irb):4:in initialize' from (irb):4:innew’
from (irb):4:in irb_binding' from /usr/lib/ruby/1.8/irb/workspace.rb:52:inirb_binding’
from :0
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.
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 forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.